Рассмотрим:
int ia[3][4];
for (auto row : ia)
for (auto col : row)
Первый
for
выполняет итерацию через ia, элементами которой являются массивы размера 4. Потому чтоrow
не является ссылкой, когда компилятор инициализируетrow
, он преобразует каждый элемент массива (как любой другой объект массива type) указателю на первый элемент массива. В результате в этом loop типrow
равенint*
.
Я не уверен, что понимаю, как работает этот авто, но если я могу предположить, что он автоматически дает тип строке на основе типа элементов массива ia
, но я не понимаю, почему этот тип for
, где строка не является ссылкой, недействительна. Почему это произойдет? "указатель на этот массив первый элемент", из-за чего?