当迭代遍历多维数组时:
int arr[2][2] = {{6, 7}, {8, 3}, {5, 2}};
for (auto &row : arr) {
for (auto &cell : row) {
// code
}
}
row
和cell
的类型是什么?为什么必须使用参考?
答案 0 :(得分:3)
当您不使用引用数组到指针转换时,row
是指向两个int
s(int(*)[2]
)数组的类型指针。然后内部循环形成不良,因为要使它工作,你需要:
begin
和end
成员函数的类型,begin
和end
通过参数依赖查找并返回迭代器或x
和x + bound
分别用于begin
和end
,其中x
是范围,bound
是阵列绑定。 int(*)[2]
没有完整地记录这些条件。 OTOH,当你使用auto&
时,你得到int(&)[2]
并且第三个子弹适用。
P.S。你有int[2][2]
的初始化程序太多了。
答案 1 :(得分:0)
row
是一个int
的数组。 cell
是对int
的引用。如果要修改cell
的内容,则需要引用,否则循环变量将是副本。