首页 > 解决方案 > 是否可以在 C++ 中使用初始化列表设置数组的特定成员?

问题描述

我知道您可以使用如下初始化列表初始化整个数组:

struct s {
    int a[1];
    s (int b): a{b}{}
};

,但是可以设置一个特定成员的值吗?因为这:

struct s {
    int a[1];
    s (int b): a[0]{}
};

不起作用并引发两个错误:

expected '(' before '[' token  

expected '{' before '[' token.

标签: c++arraysinitialization

解决方案


您可以通过聚合初始化将值放在适当的位置来初始化数组的元素。

struct s {
    int a[2];
    s (int b): a{b, 0} {} // sets a[0] with the value of b
                          // a[1] is set to zero
};

s foo(1);  
std::cout << foo.a[0] << " " << foo.a[1]; // 1 0

更新(感谢@NathanOliver)

缺少的元素被零初始化

struct s {
    int a[2];
    s (int b): a{b} {} // a[1] is already 0
};

推荐阅读