【发布时间】:2019-10-15 11:54:44
【问题描述】:
第 1 行的错误有什么好的解释?
/* Line 0 */ int foo[10][10];
/* Line 1 */ int foo_alias_compile_error[] = foo[0];
/* Line 2 */ int foo_alias_also_errors[10] = foo[0];
/* Line 3 */ int * foo_alias_works = foo[0];
第 2 行的错误并没有真正困扰我,因为我不需要能够重复自己并重新声明数组的大小。但是,第 1 行的错误(聚合对象需要用“{...}”初始化)让我感到困惑。我知道int foo_alias_compile_error[] 可能是“聚合对象”。我只是不明白为什么语言设置为不起作用。我理解为什么第 3 行有效,但它有点不具代表性——它是一个数组,所以我宁愿将它作为一个数组进行自我记录。
【问题讨论】:
-
您可能更喜欢使用
std::array<std::array<int, 10>, 10>。它可以按照您的意愿进行自我记录,并按照您的预期行事,就像其他值类型一样。 -
啊,这是一个好点。不幸的是,这是在 GPU 上的,所以我没有任何 STL 可用。
-
请注意,第 3 行提供了一个指向
foo[0]的指针,这不是您在第 1 行中想要的。看起来您打算复制该数组。如果是这样的话,第 3 行的行为会大不相同。 -
您应该使用您使用的任何着色器语言来标记问题。这不是 C++ 问题,即使许多着色器语言看起来很像 C++。
-
@ragerdl 如果你只想引用一个数组,你需要
int (&bar)[10] = foo[0];。这里bar是对int[10]的引用,初始化为数组foo[0]。
标签: c++ arrays initialization