Visual Studio 2012/2013类内成员初始化

tom*_*nes 6 c++ c++11 visual-studio-2012 visual-studio-2013

这个

class X
{
 int x = 2;
 string y {"smt"};
 int tab[3] = {1,2,3}; // or tab[3] {1,2,3}
};
Run Code Online (Sandbox Code Playgroud)

据我所知,在新的C++ 11标准中是可行的.但是,Visual Studio 2012 V3或2013中不允许这样做.第一个给出:

error C2864: 'A::a' : only static const integral data members can be initialized within a class
Run Code Online (Sandbox Code Playgroud)

关于';'的第二和第三个错误 和'{'.

它是否基本上意味着这些功能在MS编译器中仍然不可用?什么编译器实际支持它?我在Visual中搜索了关于类内初始化的答案,但没有找到关于最新版本的具体内容.

提前致谢.

Iva*_*rop 9

不,Microsoft编译器不支持非静态数据成员初始值设定项.Herb Sutter宣布它将在Visual Studio 2013 RTM中实现.(链接)

Sutter先生说,实现C++ 11功能这种延迟的主要原因是微软试图同时实现C++ 14功能,因为它们是紧密耦合的.因此,我们可能会在VS2013版本中获得一些C++ 14功能.

其他主要编译器:

  • GCC支持它(它是从4.8.1版开始的第一个完全符合C++ 11的编译器)
  • Clang从3.0版开始支持
  • 英特尔自14版起支持