在初始化列表中初始化一个常量大小的数组

Ser*_*rge 23 c++ arrays class constants initializer-list

我的情况可以归纳如下:

class Test
{

    Test();

    int MySet[10];

};
Run Code Online (Sandbox Code Playgroud)

是否可以MySet在初始化列表中初始化?

像这种初始化列表:

Test::Test() : MySet({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {}
Run Code Online (Sandbox Code Playgroud)

有没有办法在类的初始化列表中初始化一个常量大小的成员数组?

old*_*inb 27

虽然在C++ 03中不可用,但C++ 11引入了扩展的初始化列表.如果使用符合C++ 11标准的编译器,您确实可以这样做.

struct Test {
    Test() : set { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } { };
    int set[10];
};
Run Code Online (Sandbox Code Playgroud)

上面的代码编译精细使用g++ -std=c++0x -c test.cc.


正如下面由评论中的一位有用的用户所指出的,这段代码不能使用Microsoft的VC++编译器编译.也许有人可以告诉我是否等效使用std::array会?

#include <array>

struct Test {
  Test() : set { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } } { };
  std::array<int, 10> set;
};
Run Code Online (Sandbox Code Playgroud)

这也编译精细使用g++ -std=c++0x -c test.cc.

  • 请注意,此代码不能使用Visual C++版本11及更早版本进行编译(即,它不能使用Microsoft Visual Studio 2012进行编译,而Visual C++是最常用平台的主要编译器).所以,**如果你想要便携式代码,请不要这样做**.然而. (5认同)
  • 喜欢C++ 11(或其中某些部分)的另一个好理由!= D非常感谢你! (2认同)

Joh*_*0te 5

不幸的是,在 C++03 中,您无法在初始值设定项列表中初始化数组。如果你的编译器较新,你可以在 C++11 中使用:)

请参阅:如何使用初始化器列表初始化成员数组?