Что мешает не вычислять size() каждую итерацию цикла?
От: Zhendos  
Дата: 30.04.21 12:57
Оценка:
Почему код ниже превращается в ассебмлер, где каждую итерацию цикла
"size" перевычисляется? Грубо говоря "foo" получает "MyVec<int> *",
почему компилятор считает что "MyVec<MyVec<int>>" может из-за этого поменяться?

#include <cstddef>

template<typename T>
struct MyVec {
    T *begin;
    T *end;

    constexpr size_t size() const noexcept { return end - begin; }
    const T& operator[](size_t i) const noexcept { return begin[i]; }
};

void foo(MyVec<int> const&);

void indexed(MyVec<MyVec<int>> const& in) {
    for (size_t idx = 0; idx < in.size(); ++idx) {
        foo(in[idx]);
    }
}


Ссылка на godbolt
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.