Lor*_*ins 18 c++ compound-literals c++14
复合文字是C99结构.即使我可以用C++做到这一点:
#include <iostream>
using namespace std;
int main() {
for (auto i : (float[2]) {2.7, 3.1}) cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
似乎MSVC支持它作为扩展.然而,我可以得到所有编译器,编译上面提到的代码.
这是C++ 14中的一个功能吗?是否有一个不同的标准术语(在我看来,只是创建一个临时使用支撑初始化)?
旁注:"复合文字"(或者我应该称之为的任何内容)是包扩展上下文(仅提及功能)
T.C*_*.C. 24
(float[2]) {2.7, 3.1}
Run Code Online (Sandbox Code Playgroud)
是一个C99复合文字.一些编译器在C++中支持它作为扩展.
float[2] {2.7, 3.1}
Run Code Online (Sandbox Code Playgroud)
是语法错误.
鉴于using arr = float[2];
,
arr {2.7, 3.1}
Run Code Online (Sandbox Code Playgroud)
是有效的C++列表初始化两个临时数组float
.
{2.7, 3.1}
Run Code Online (Sandbox Code Playgroud)
被称为braced-init-list.
最后,为您的代码,
for (auto i : {2.7, 3.1}) cout << i << endl;
Run Code Online (Sandbox Code Playgroud)
同样有效,并且是完全有效的C++ - 这构建了一个std::initializer_list<double>
引擎盖.如果您真的想要float
s,请将f
后缀添加到数字中.