Если вы не используете обратное преобразование массива в указатель, и 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]
.
Является ли тип 'row'' int * 'или' int (*) [2] '? Согласно книге C++ primer, он говорит, что тип 'row' является' int * '. См. [Использование диапазона для многомерных массивов] (https://books.google.com.sg/books?id=J1HMLyxqJfgC&lpg=PT268&ots=FJNBVd5hdq&dq=As%20a%20result%2C%20in%20this%20loop%20the % 20type% 20of% 20row% 20is% 20int *.% 20the% 20inner% 20for% 20loop% 20is% 20illegal.% 20Despite% 20our% 20intentions% 2C% 20that% 20loop% 20attempts% 20to% 20iterate% 20over% 20an% 20int * . & пг = PT268 # v = OnePage & д & е = ложь) – zhenguoli