#cpp11 #cpp14
Можно ли передать в функцию при вызове анонимный массив, как например со строкой? Почему пример 2 не работает ? как сделать чтоб он заработал не используя лишних переменных ? пример 1 void foo(char *arr) { cout << arr[2]; }; int main() { foo("123"); } пример 2 void foo(int *arr) { cout << arr[2]; }; int main() { foo({1,2,3}); }
Ответы
Ответ 1
Потому что конструкция вида {1, 2, 3} не является, как Вы выразились, анонимным массивом. Она называется braced-init-list и ведёт себя по-разному, в зависимости от контекста. В Вашей ситуации можно поступить следующим образом: void foo(std::initializer_listarr) { cout << arr.size(); cout << arr[2]; }; Где std::initializer_list - объект, который ведёт себя как контейнер и, по факту, содержит в себе пару указателей, поэтому не сильно нагружает run-time.
Комментариев нет:
Отправить комментарий