您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++ std::initializer_list實現(xiàn)原理是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++ std::initializer_list實現(xiàn)原理是什么”吧!
std::initializer_list
的實現(xiàn)原理:
/// initializer_list template<class _E> class initializer_list { public: typedef _E value_type; typedef const _E& reference; typedef const _E& const_reference; typedef size_t size_type; typedef const _E* iterator; typedef const _E* const_iterator; private: iterator _M_array; size_type _M_len; // The compiler can call a private constructor. constexpr initializer_list(const_iterator __a, size_type __l) : _M_array(__a), _M_len(__l) { } constexpr initializer_list() noexcept : _M_array(0), _M_len(0) { } // Number of elements. constexpr size_type size() const noexcept { return _M_len; } // First element. constexpr const_iterator begin() const noexcept { return _M_array; } // One past the last element. end() const noexcept { return begin() + size(); } };
他認為,構(gòu)造 std::initializer_list
之前編譯器會先構(gòu)造一個 std::array
,然后使用 std::array
的 begin()
和 size()
構(gòu)造 std::initializer_list
。這種說法有一處錯誤。編譯器不會構(gòu)造 std::array
,而是在棧上直接構(gòu)造一個數(shù)組 const T[N]
。在棧上構(gòu)造的數(shù)組會像其他變量一樣,在離開作用域時自動析構(gòu),不需要手動管理內(nèi)存,所以根本沒必要使用 std::array
。
這個是 cppreference.com 的描述:
The underlying array is a temporary array of type
const T[N]
明確地說是普通的 array
。
這個是 N3337 的描述:
An object of type
initializer_list<E>
provides access to an array of objects of typeconst E
.
并沒有說是 std::array
。
感謝各位的閱讀,以上就是“C++ std::initializer_list實現(xiàn)原理是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++ std::initializer_list實現(xiàn)原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。