Как использовать структурированное связывание в массиве, передаваемом в качестве аргумента некоторой функции? - PullRequest
8 голосов
/ 11 мая 2019

Я пытаюсь разложить массив из 2 целых чисел, данный функции на x, y

Не работает при использовании int init[2] в качестве параметра. Но это происходит, когда я изменяю его на int (&init)[2].

vector<vector<State>> Search(vector<vector<State>> board,
                             int init[2], int goal[2]) {
  auto [x, y] = init;
}

Что означает (&init) здесь? И почему это не работает при использовании int init[2]?

1 Ответ

8 голосов
/ 11 мая 2019

int (&init)[2] является ссылкой на массив из двух целых чисел.int init[2] в качестве параметра функции является остатком C ++ из C ++.Он не объявляет функцию как принимающую массив.Тип параметра устанавливается на int*, и вся информация о размере массива, передаваемого в функцию, теряется.

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

Поскольку в рабочей версии init относится к объекту int[2], структурированные привязки могут работать с этим объектом массива.,Но разрушенный указатель не может быть предметом структурированных привязок, потому что доступная информация статического типа дает доступ только к одному элементу, на который указывают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...