initializer_list 是否被视为 C++ 核心语言的一部分?

Twi*_*ard 8 c++ initializer-list language-lawyer

我问是因为auto推断{}initializer_list。我不知道核心语言像这样依赖标准库中的任何其他类。你可以去掉vectoror array,C++ 仍然可以运行,但是去掉initializer_list它就会崩溃。

Dre*_*ann 5

你所说的{}(具体来说= {...})是标准所说的复制列表初始化

\n

是的,在标准的措辞中得到了特别std::initializer_list考虑

\n
\n

如果占位符类型说明符的形式为type-constraint ,则使用模板参数推导规则确定替换 T 的auto推导类型。T如果初始化是复制列表初始化,则 的声明std\xe2\x80\x8b::\xe2\x80\x8binitializer_\xc2\xadlist应位于 ([basic.lookup.general])占位符类型说明符之前。

\n
\n
[Example 1:\nauto x1 = { 1, 2 };             // decltype(x1) is std\xe2\x80\x8b::\xe2\x80\x8binitializer_\xc2\xadlist<int>\nauto x2 = { 1, 2.0 };           // error: cannot deduce element type\nauto x3{ 1, 2 };                // error: not a single element\nauto x4 = { 3 };                // decltype(x4) is std\xe2\x80\x8b::\xe2\x80\x8binitializer_\xc2\xadlist<int>\nauto x5{ 3 };                   // decltype(x5) is int\n
Run Code Online (Sandbox Code Playgroud)\n