为什么这个在 VS 2013 中编译
int main()
{
int a[3] = { 1, 2, 3 };
return 0;
}
但这给出了错误
class TestClass
{
int a[3] = { 1, 2, 3 };
};
我如何解决它?
来自 Bjarne 的 C++11 FAQ 页面:
在 C++98 中,只有整型的静态 const 成员可以在类中初始化,并且初始化器必须是常量表达式。 [...] C++11 的基本思想是允许非静态数据成员在声明的地方(在其类中)进行初始化。
问题是,VS2013并没有实现C++11的所有功能,而这只是其中之一。所以我建议你使用 std::array (注意额外的大括号组):
#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;
}
关于聚合初始化的 cppreference 链接
如果您有兴趣可以点击在这个链接上看看您所做的事情在使用实现此功能的编译器时是否可以编译(在本例中为 g++,我已经在 clang++ 上尝试过,它也有效)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)