我现在正在阅读C++ 14的标准草案,也许我的法律术语有点生疏,但我找不到允许初始化如下所示
std::array<int, 3> arr{1,2,3};
Run Code Online (Sandbox Code Playgroud)
合法.(编辑:显然上面是C++ 11中的合法语法.)目前在C++ 11中我们必须将std :: array初始化为
std::array<int, 3> arr{{1,2,3}}; // uniform initialization + aggregate initialization
Run Code Online (Sandbox Code Playgroud)
要么
std::array<int, 3> arr = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
我以为我听说他们在C++ 14中放松了规则,所以我们在使用统一初始化时不必使用双括号方法,但我找不到实际的证据.
注意:我关心这个的原因是因为我目前正在开发一个multi_array类型,并且不想像它一样初始化它
multi_array<int, 2, 2> matrix = {
{{ 1, 2 }}, {{ 3, 4 }}
};
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 18
实际上你也可以在C++ 11中编写以下内容:
std::array<int, 3> arr{1,2,3};
Run Code Online (Sandbox Code Playgroud)
这是完全有效的语法.
什么是不容许在C++ 11虽然是像这种情况(见这个话题,我不想再在这里写这篇文章,它是一个长期职位).所以,如果你那么问,是的,我们可以省略C++ 14中的额外括号.这是提案:
引言说
本文档建议略微放宽从聚合初始化中删除大括号的规则,以便使数组和类聚合的初始化更加统一.需要进行此更改才能支持具有单个成员子聚合的类聚合类型,其行为类似于其数组对应(即
std::array).
希望有所帮助.