gpt4 book ai didi

c++ - 为什么不能简单初始化(带大括号)2D std::array?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:16 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
c++ why initializer_list behavior for std::vector and std::array are different

我定义了简单的二维数组 (3X2):

  std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};

我很惊讶这个初始化不起作用,gcc4.5 错误:too many initializers for 'std::array<std::array<int, 3u>, 2u>'

为什么我不能使用这种语法?

我找到了解决方法,一个非常有趣的方法是使用额外的大括号,但只是想知道为什么第一种最简单的方法无效?

解决方法:

  // EXTRA BRACES
std::array<std::array<int,3>,2> a {{
{1,2,3},
{4,5,6}
}};

// EXPLICIT CASTING
std::array<std::array<int,3>,2> a {
std::array<int,3>{1,2,3},
std::array<int,3>{4,5,6}
};

[更新]

好的,感谢 KerrekSB 和评论,我明白了。所以我的示例中的大括号似乎太少了,就像在这个 C 示例中一样:

struct B {
int array[3];
};
struct A {
B array[2];
};

B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};

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