duk*_*ver 1 c++ arrays foreach loops c++11
我只是为我的程序编写一些代码,但最终我忘记写一个小符号并出错,请帮助理解这里有什么问题。
我想写的代码 -
int arr[3][2] = {with some values};
for(auto &i : arr) {
for(int j : i)
cout << j << " " ;
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
我不小心写的代码 -
int arr[3][2] = {with some values};
for(auto i : arr) { // just forgot to write (&) and got error
for(int j : i)
cout << j << " " ;
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
我知道的事情- 引用(“&”)运算符使我们能够更改循环本身内的值。
但是第二个循环中的错误是什么,我的意思是它可以一个一个地深度复制数组对象,并创建单独的对象,然后遍历它们,尽管我们将无法更改数组值本身。
我得到的错误- 'std::end' declared here 1244 | end(const valarray<_Tp>& __va)
的元素arr是一个数组 ( int[2])。问题是,如果您声明i为非引用,它将被推导出为 type int*,数组将衰减为指针并i在迭代期间设置为。指针不能与基于范围的 for 循环一起使用。来自的错误消息for(int j : i)试图告诉您没有std::end声明 for int*。
如果声明i为引用,它将引用数组 ( int(&)[2]),不会发生数组到指针的转换(数组衰减)。