Передача массива в функцию не обьявляя его

177
11 декабря 2018, 04:40

Как можно передать массив в функцию не обьявляя его?

template <size_t N>
void foo(int(&arr)[N]) {
    for (int var : arr)
        printf("%d\n", var);
}
int main(){
    foo( { 1, 4, 5, 6 } ); // <- Ошибка
    return 0;
}
Answer 1

Проблема вашего кода не имеет никакого отношения к массивам.

Если вы хотите передавать что-то по lvalue-ссылке, то помните, что ко временным объектам разрешается привязывать только константные lvalue-ссылки (т.е., выражаясь корректнее, ссылки на константу). Нужно только иметь в виду, что в случае массива константность всего массива "проваливается вниз" и становится константностью индивидуальных элементов массива

template <size_t N>
void foo(const int (&arr)[N]) {
  ...

Это все, что надо исправить в вашем коде.

http://coliru.stacked-crooked.com/a/e98e75636ab73993

Answer 2
void foo(std::initializer_list<int> c) {
    for (int var : c)
        printf("%d\n", var);
}
int main(){
    foo( { 1, 4, 5, 6 } ); // <- Ошибка
    return 0;
}
READ ALSO
Управление динамической памятью в С++

Управление динамической памятью в С++

Подскажите есть ли правила хорошего тона или общепринятые соглашения по управлению динамической памятью в C++

210
Передается указатель вместо копии

Передается указатель вместо копии

Почему адрес objects у form, user,user2,user3 одинаковый? И как это исправить?

197
C++ WinApi WNDPROC в классе

C++ WinApi WNDPROC в классе

Как поместить WndProc в класс? Как это работает в оконных библиотеках? (например GLFW)Как я понял в windows forms все события это wndproc, но как wndproc помещен...

169
Как в cmake производит поиск библиотек в Windows?

Как в cmake производит поиск библиотек в Windows?

Пишу небольшой кроссплатформенный проект на qt5 + cmake с использованием protobufНа linux всё собирается замечательно но на windows cmake не может выполнит...

181