Можно ли передать в функцию при вызове анонимный массив, как например со строкой?
Почему пример 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
Где std::initializer_list - объект, который ведёт себя как контейнер и, по факту, содержит в себе пару указателей, поэтому не сильно нагружает run-time.
Комментариев нет:
Отправить комментарий