千家信息网

C++ std::initializer_list实现原理是什么

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章主要讲解了"C++ std::initializer_list实现原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++ std::i
千家信息网最后更新 2025年02月08日C++ std::initializer_list实现原理是什么

这篇文章主要讲解了"C++ std::initializer_list实现原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++ std::initializer_list实现原理是什么"吧!

std::initializer_list 的实现原理:

/// initializer_list  template    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::arraybegin()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 provides access to an array of objects of type const E.

并没有说是 std::array

感谢各位的阅读,以上就是"C++ std::initializer_list实现原理是什么"的内容了,经过本文的学习后,相信大家对C++ std::initializer_list实现原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0