编译器的大括号初始值设定项列表与类型"std::initializer_list"的耦合程度如何?
How tightly coupled is the compiler's brace-initializer-list to the type `std::initializer_list`?
如果没有C++头<initializer_list>
,我能达到同样的效果吗?
class initializer_list
必须存在于namespace std
中吗(编译器需要这样做吗)?
我对适用于五大(GCC、MSVC、Intel、Clang、Comeau)的解决方案很满意
它按照标准紧密耦合。它是一个围绕编译器构建的数组的包装器(尽管标准没有说明精确程度——GCC使用带指针和大小的构造函数,MSVC使用带两点的构造函数)。是的,它必须位于名称空间std
和标头<initializer_list>
中。
你必须看看他们在每个编译器中使用了什么构造函数,你想在你的版本中支持和复制它们,但TBH,我看不出这一点。
模板
std::initializer_list
未预先定义;如果在使用std::initializer_list
之前不包括报头<initializer_list>
——即使是未命名类型的隐式使用(7.1.6.4)——则程序是格式错误的。
std::initializer_list<E>
类型的对象是从初始化器列表构造的,就好像实现分配了一个由N个E类型元素组成的数组,其中N是初始化器列表中的元素数。该数组的每个元素都是用初始化器列表的相应元素进行复制初始化的,并且std::initializer_list<E>
对象被构造为引用该数组。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- std::move in initializer lists
- "默认参数":无法从'initializer list'转换为'std::initializer_list'
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?
- 在GCC中使用Brace Initializer初始化成员STD ::数组时错误
- VS2015无法从'initializer list'转换为'std::string'错误
- 如何使用 std::array 的默认参数? "array must be initialized with a brace-enclosed initializer"
- 为什么我会收到"variable 'std::packaged_task<int> task' has initializer but incomplete type"错误
- 为什么从std::string的initializer列表中填充std::向量不会调用std::字符串构造函数
- 如何解决"Variable 'std::ifstream myfile' has initializer but incomplete type"
- 将Initializer Lists与std::map一起使用
- <function-style-cast> 错误:无法从'initializer list'转换为'std::thread'