STL独立的初始化器列表
STL independent initializer list
我对初始器列表有些困惑。
我认为初始化列表是C 的一部分:
struct Something { char c0, c1; };
Something something = { 'H', 'W' };
类似地与数组等类似,并且与STL(在<initializer_list>
中)(在CC_1中)相连的东西,称为std::initializer_list<T>
,它匹配初始器列表,例如方法参数等
std::initializer_list<char> list = { 'H', 'e', 'l', 'l', 'o' };
现在我的困惑:
auto match = { 'H', 'e', 'l', 'l', 'o' };
当我查看什么是auto
解释(在MSVC 2015中)时,它是std::initializer_list<char>
。
所以我的问题是:
C 语言与STL库之间的界线在哪里?
是否有一些指令指定如何解释初始化器列表(以C 含义)?
可能会改变,例如从std::initializer_list<T>
到T[]
?
这是一个汇总初始化
struct Something { char c0, c1; };
Something something = { 'H', 'W' };
C 语言与STL库之间的界线在哪里?
这并不是 c 语言和 stl库之间的区别实体)。要点是区分您初始化哪种元素以及可用的构造函数。
大多数混乱源于这样一个事实,即提案和缺陷报告激起了很多关于要解释卷发的初始化的争论(Cfr。ScottMeyers文章,最近也讨论了其中一些)))。
是否有一些指令指定如何解释初始化器列表(以C 含义)?
理解它的唯一正确方法是能够识别您使用的类型并理解C 标准指令(根据您使用的C 版本和编译器支持)。
基于MSDN线程部分答案。
C 语言与STL库之间的界线在哪里?
标准库和纯C 之间的界线有点嘈杂。它位于库的一部分,称为LSL,语言支持库。该行存在于以下示例中:分配返回std::bad_alloc
。类似地与std :: size_t,std :: nullptr_t等...
在以下示例中,如果存在该行,则是嘈杂的: dynamic_cast抛出 std::bad_cast
。 Indipensibility LSL和C 的类似示例是初始化列表。
是否有一些指令指定如何解释初始化器列表(以C 含义)?
存在作为语言规范的指令,作为#pragma指令的指令或任何简单更改的内容都没有。
可能会改变,例如从std :: prinitizer_list到t []?
在MSVC中,没有。
- 复制列表初始化的隐式转换的等级是多少
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C++11 中的混合列表初始化
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 默认参数和空列表初始化
- 如何在列表初始化中放置额外的语句?
- C++列表初始化允许多个用户定义的转换
- 列表初始化是否将原子初始化为零
- 使用可变模板列表初始化数组,并放置new
- 使用整数初始化列表初始化长双精度的向量
- 直接列表初始化的自动规则
- 使用初始化列表初始化unique_ptr的容器,继续
- 如何修复"非聚合无法使用初始值设定项列表初始化" <map>
- 直接列表初始化和复制列表初始化之间的差异
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- C++ - 使用类中的初始值设定项列表初始化动态集