C++ 什么';std::array的这种内联初始化有什么问题?
考虑以下声明:C++ 什么';std::array的这种内联初始化有什么问题?,c++,arrays,c++11,g++,C++,Arrays,C++11,G++,考虑以下声明: #include <array> struct X { //std::array<bool,3> arr={false,false,false}; bool brr[3]={false,false,false}; }; OTOH,这个声明在main()中没有问题。此外,以下初始化在结构X中也起作用: std::array<bool,3> arr={{false,false,false}}; std::array arr={
#include <array>
struct X
{
//std::array<bool,3> arr={false,false,false};
bool brr[3]={false,false,false};
};
OTOH,这个声明在main()
中没有问题。此外,以下初始化在结构X中也起作用:
std::array<bool,3> arr={{false,false,false}};
std::array arr={{false,false,false};
为什么我不能在结构定义中使用带大括号的简单初始化?这看起来像是一个gcc错误,请参见:。报告说: 〈C++编程语言〉第975页,第四版,Bjarne 斯特罗斯图普说: “数组可以由初始值设定项列表初始化:数组a1= {1,2,3};” 而叮当(3.5节)接受了它。然而,G++4.9.2认为这是一个 错误: 看起来修复程序在head版本中,OPs代码在该版本中起作用 正如错误报告中所指出的,使用一组内部大括号是一种可能的解决方法:
std::array<bool,3> arr={ {false,false,false} };
^ ^
std::array arr={{false,false,false};
^ ^
注意,在C++11中,与具有类内初始值设定项的C++14不同。
"error: array must be initialized with a brace-enclosed initializer
const std::array<double, 3> _ar0val = {1.0, -1.0, 1.0};"
struct array {
int data [2];
};
struct X {
array a = { 1, 2 };
};
std::array<bool,3> arr={ {false,false,false} };
^ ^