由於不是問程式碼相關的題目,故前面敘述恕刪,最近剛開始看C++ Primer,
讀到Ch3多維陣列的部分(P128),它裡面給了另一種用auto來跑for loop的方式,舉個
例子來說:
int ia[2][2]={1,2,3,4};
//印出陣列的每個元素值
for(auto &row : ia)
for(auto col :row){
cout<< col << endl;
}
書中註明,auto &row中的&不能省略,否則編譯器會把row轉成一個pointer(指
向每列的第一個元素),跑到第二個loop的時候就變成違法的指令了(原文:That
loop attempts to iterate over an int*),所以說一定要要有&才會把row轉成
一個一維陣列,然後我就有點不懂為什麼編譯器會這樣做了,畢竟前面講auto的
內容好像沒有有提到auto聲明的時候加上reference會造成這種最後type的不同,
想請問這是C++的規定還是背後有什麼特別的哲學(或者機制)嗎?