int (&init)[2]
является ссылкой на массив из двух целых чисел.int init[2]
в качестве параметра функции является остатком C ++ из C ++.Он не объявляет функцию как принимающую массив.Тип параметра устанавливается на int*
, и вся информация о размере массива, передаваемого в функцию, теряется.
Функция, принимающая int init[2]
, может быть вызвана с массивом любого размера из-за фактического получения указателя.Это может даже быть передано nullptr
.В то время как функции, принимающей int(&)[2]
, может быть задан только допустимый массив из двух в качестве аргумента.
Поскольку в рабочей версии init
относится к объекту int[2]
, структурированные привязки могут работать с этим объектом массива.,Но разрушенный указатель не может быть предметом структурированных привязок, потому что доступная информация статического типа дает доступ только к одному элементу, на который указывают.