STL独立的初始化器列表

STL independent initializer list

本文关键字:列表 初始化 独立 STL      更新时间:2023-10-16

我对初始器列表有些困惑。

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

可能无处