C++中的std::initializer_list详解

initializer_list是C++11提供的一种新类型,其定义于头文件中,此头文件是工具库的一部分,定义如下:

namespace std {
   
  template<class E> class initializer_list {
   
  public:
    using value_type = E;
    using reference = const E&;
    using const_reference = const E&;
    using size_type = size_t;
    using iterator = const E*;
    using const_iterator = const E*;
    constexpr initializer_list() noexcept;
    constexpr size_t size() const noexcept; // 元素数量
    constexpr const E* begin() const noexcept; // 首元素
    constexpr const E* end() const noexcept; // 末元素后一位置
  };
  // initializer_list 范围访问
  template<class E> constexpr const E* begin(initializer_list<E> il) noexcept;
  template<class E> constexpr const E* end(initializer_list<E> il) noexcept;
}

std::initializer_list 类型对象是一个访问 const T 类型对象数组的轻量代理对象。
std::initializer_list 对象在这些时候自动构造:

  • 用花括号初始化器列表列表初始化一个对象,其中对应构造函数接受一个std::initializer_list 参数
  • 以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数接受 std::initializer_list 参数
  • 绑定花括号初始化器列表到 auto ,包括在范围 for 循环中

initializer_list 可由一对指针或指针与其长度实现。复制一个 std::initializer_list 不会复制其底层对象。

底层数组不保证在原始 initializer_list 对象的生存期结束后继续存在。 std::initializer_list 的存储是未指定的(即它可以是自动、临时或静态只读内存,依赖场合)。 (C++14 前)

底层数组是 const T[N] 类型的临时数组,其中每个元素都从原始初始化器列表的对应元素复制初始化(除非窄化转换非法)。底层数组的生存期与任何其他临

你可能感兴趣的:(C++/STL,C++11/C++14,C++)