我对初始器列表有些困惑。
我认为初始化列表是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中,没有。