#include <array>
class A
{
public:
A() : a({ { 1, 2, 3 } }) {} // This is aggregate initialization, see main() for another example
private:
std::array<int, 3> a; // This could also be std::vector<int> depending on what you need.
};
int main()
{
std::array<int, 3> std_ar2 { {1,2,3} };
A a;
return 0;
}
3条答案
按热度按时间de90aj5v1#
来自Bjarne的C11 FAQ页面:
在C98中,只有整型的静态常量成员可以在类中初始化,并且初始化器必须是常量表达式。[...] C11的基本思想是允许在声明非静态数据成员的地方(在它的类中)初始化它。
问题是,VS2013没有实现C11的所有功能,这是其中之一。所以我建议你使用std::array(注意多了一组大括号):
字符串
cppreference link on aggregate initialization
如果你感兴趣的话,你可以点击on this link,看看你所做的在使用一个实现了这个特性的编译器(在这个例子中是g++,我在clang++上试过了,它也能工作)时是否能编译。
5t7ly7z52#
原因:尚未在该版本的Visual C++中实现。
修复:使用
std::array
并在每个构造函数中初始化。zqry0prt3#
除了像其他答案建议的那样使用
std::array
之外,您还可以使用in this answer描述的方法:在类声明中(通常在头文件中)将数组标记为static,并在源文件中初始化它。像这样:test.h:
字符串
test.cpp:
型
最终,随着MSVC赶上C++11,这将变得不必要。