具有聚合初始化的这种代码是有效的 C++ 程序吗?
#include <iostream>
#include <numeric>
struct Sheet {
const int c[2]{};
const int sum = std::accumulate(std::begin(c), std::end(c), 0);
};
int main() {
Sheet sheet0;
Sheet sheet1{{10}};
Sheet sheet2{{10, 20}};
std::cout << sheet0.sum << "\n";
std::cout << sheet1.sum << "\n";
std::cout << sheet2.sum << "\n";
}
// Outputs:
// 0
// 10
// 30
这是一个具有类似 Excel 表行为的结构:用户使用一些值初始化单元格,如果用户不初始化,sum
则它会获取单元格值的计算总和。
我不确定在聚合初始化中跳过的成员处是否发生内联成员初始化而不是零初始化。
我预计声明
Sheet sheet2{{10, 20}};
相当于
Sheet sheet2{{10, 20}, {}};
并输出0,但我的程序运行表明它们导致不同的输出30和0。