6

这个

class X
{
 int x = 2;
 string y {"smt"};
 int tab[3] = {1,2,3}; // or tab[3] {1,2,3}
};

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

error C2864: 'A::a' : only static const integral data members can be initialized within a class

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

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

提前致谢。

4

1 回答 1

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 开始支持
于 2013-08-29T19:09:11.720 回答