Страницы

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

воскресенье, 1 декабря 2019 г.

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

#cpp


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

template 
void foo(int(&arr)[N]) {
    for (int var : arr)
        printf("%d\n", var);
}

int main(){
    foo( { 1, 4, 5, 6 } ); // <- Ошибка
    return 0;
}

    


Ответы

Ответ 1



Проблема вашего кода не имеет никакого отношения к массивам. Если вы хотите передавать что-то по lvalue-ссылке, то помните, что ко временным объектам разрешается привязывать только константные lvalue-ссылки (т.е., выражаясь корректнее, ссылки на константу). Нужно только иметь в виду, что в случае массива константность всего массива "проваливается вниз" и становится константностью индивидуальных элементов массива template void foo(const int (&arr)[N]) { ... Это все, что надо исправить в вашем коде. http://coliru.stacked-crooked.com/a/e98e75636ab73993

Ответ 2



void foo(std::initializer_list c) { for (int var : c) printf("%d\n", var); } int main(){ foo( { 1, 4, 5, 6 } ); // <- Ошибка return 0; }

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

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