Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Передача анонимного массива в функцию с++

Можно ли передать в функцию при вызове анонимный массив, как например со строкой? Почему пример 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, 2, 3} не является, как Вы выразились, анонимным массивом. Она называется braced-init-list и ведёт себя по-разному, в зависимости от контекста. В Вашей ситуации можно поступить следующим образом:
void foo(std::initializer_list arr) { cout << arr.size(); cout << arr[2]; };
Где std::initializer_list - объект, который ведёт себя как контейнер и, по факту, содержит в себе пару указателей, поэтому не сильно нагружает run-time.

Комментариев нет:

Отправить комментарий