foreach в функции

712
11 декабря 2018, 05:00

Подскажите пожалуйста почему такая запись выдаёт ошибку. "не найдена соответствующая функция begin, необходимая для этого основанного на диапазоне оператора for"

int func(int arr[]) {   
    for (auto &var : arr) //
        std::cout << var << std::endl;
}

хотя вот такая запись работает

int main() {
    int arr[] = { 5,11,99,54 };
    for (auto &var : arr)
        std::cout << var << std::endl;
    return 0;
}
Answer 1

Потому что в первом случае arr представляет собой указатель на int и не несет в себе никаких сведений о размере массива.

Во втором случае arr - это реально массив. Размер которого компилятору известен.

int func(int arr[], int n) {   
    for (int i = 0; i < n; ++i) //
        std::cout << arr[i] << std::endl;
}
Answer 2

Вот решил задачу. Поправте меня если этот код не так хорошь как кажеться. Хотя работает как нужно.

template <size_t N>
void foo(int(&arr)[N])
{
    for (int var : arr)
    {
        printf("%d\n", var);
    }
}
READ ALSO
Передача массива в функцию не обьявляя его

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

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

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

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

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

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

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

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

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

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

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

172