gpt4 book ai didi

c++ - 为什么我必须在 C++ 中的 std::array 初始化时为每个项目指定类型

转载 作者:行者123 更新时间:2023-12-03 17:35:50 26 4
gpt4 key购买 nike

给定 SomeStruct 如下:

struct SomeStruct {
int i;
char c;
};

下面不编译。

int main() {
std::array<SomeStruct,2> arr = {{3, 't'}, {3, 't'}};
}

但下面的代码有效。

int main() {
std::array<SomeStruct,2> arr = {SomeStruct{3, 't'}, SomeStruct{3, 't'}};
}

这个也可以:

int main() {
std::array<SomeStruct,1> arr = {{3, 't'}};
}

为什么这 std::array<SomeStruct,2> arr = {{3, 't'}, {3, 't'}};导致编译错误?

另外,有没有更简洁的方式把std::array<SomeStruct,2> arr = {SomeStruct{3, 't'}, SomeStruct{3, 't'}} ?我不想使用 arr.fill(SomeStruct{3,'t'})或循环。我想将所有项目设置为相同的 SomeStruct{3, 't'}在初始化时。

最佳答案

根据经验,如果 std::array 初始化似乎不起作用,请继续添加额外的大括号对,直到它起作用为止...

std::array<SomeStruct,2> arr = {{{3, 't'}, {3, 't'}}}; 

这背后的原因和历史悠久而复杂,归结为聚合初始化(C 兼容性的缺陷)和非聚合列表初始化(C++11 中添加)之间的争论。

关于c++ - 为什么我必须在 C++ 中的 std::array<SomeStruct, size> 初始化时为每个项目指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58945571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com