您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++ std::initializer_list實現原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++ std::initializer_list實現原理是什么”吧!
std::initializer_list
的實現原理:
/// 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(); } };
他認為,構造 std::initializer_list
之前編譯器會先構造一個 std::array
,然后使用 std::array
的 begin()
和 size()
構造 std::initializer_list
。這種說法有一處錯誤。編譯器不會構造 std::array
,而是在棧上直接構造一個數組 const T[N]
。在棧上構造的數組會像其他變量一樣,在離開作用域時自動析構,不需要手動管理內存,所以根本沒必要使用 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實現原理是什么”的內容了,經過本文的學習后,相信大家對C++ std::initializer_list實現原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。