1

到目前为止,我只看到了 C++ 中 POD 数组的赋值初始化。例如,

int array[]={1,2,3};

这里我了解到,当数组位于 C++11 的类/结构中时,可以使用初始化列表方法来初始化数组。但我试图定义这样的数组:

int array[]({1,2,3});

编译时出现错误:

array initializer must be an initializer list

我认为它只需要一些修改,但我无法弄清楚。你能告诉我如何实现它吗?

顺便说一句,复制构造函数比这里的赋值更有效吗?我猜不是,但我不知道确切的答案。

4

2 回答 2

3

POD 数组无法使用类似构造函数(括号)的语法进行初始化。如果要以统一的方式初始化变量,请使用初始化列表(大括号)语法来初始化变量。例如,以下代码将使用 gcc 4.7.3 进行编译:

struct Foo
{
    Foo(int a, std::string s);
}

int main()
{
    // can also use parentheses on the next two lines
    int a{3};
    Foo f{a, "A string"};

    // only curly braces can be used here
    int arr[]{4, 5, 6};

    return 0;
}

花括号语法还允许您使用 std::initializer_list 以与数组相同的方式构造向量和其他 STL 类型,这只能使用括号,如下所示:

std::vector<int> v{1, 2, 3, 4, 5};

// contrast with

std::initializer_list<int> i{1, 2, 3, 4, 5}; // must use curly braces here
std::vector<int> v(i);
于 2013-06-29T14:33:20.000 回答
2

不确定我是否正确理解了您的问题的上下文,但这就是您在构造函数的初始化列表中初始化数组的方式:

struct X
{
    X() : arr{1, 2, 3} { }
//        ^^^^^^^^^^^^
private:
    int arr[3];
};
于 2013-06-29T14:08:07.003 回答