Страницы

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

суббота, 22 февраля 2020 г.

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

#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_list arr) { cout << arr.size(); cout << arr[2]; }; Где std::initializer_list - объект, который ведёт себя как контейнер и, по факту, содержит в себе пару указателей, поэтому не сильно нагружает run-time.

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

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