Это действительно очень зависит от того, что вы делаете в коде ...
.
Если компилятор может доказать, что vint.end()
не изменится, то это может не иметь значения, но вы во власти оптимизаций компилятора, и насколько ясен код ...
.
Ваш подход наиболее помогает компилятору, вы обещаете, что итератор end
не будет признан недействительным и что вы не собираетесь изменять элемент в end
(который недопустимпуть).Вы не можете быть более ясным, чем это, относительно того, что вы обещаете сделать в ...
.
Это 2019 год, и циклы for-range в основном эквивалентны вашему коду: https://en.cppreference.com/w/cpp/language/range-for
{
auto && __range = range_expression ;
auto __begin = begin_expr ;
auto __end = end_expr ;
for ( ; __begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
, что, кстати, означает, что если вы на самом деле не интересовались it
, но *it
, вы можете положить конец (без каламбура) дилемме и просто написать:
std::vector<int> vint;
for(auto&& e : vint)
{
.... // use `e` instead of `*it`.
}