На этот вопрос уже есть ответ:
Я просматривал некрасивый код (который изменял основную последовательность во время итерации), и чтобы изучить определение цикла for
, основанного на диапазоне, я перешел к cppreference .
Там я заметил кое-что странное:
Цикл for
, основанный на диапазоне, изменился в C ++ 17, но я не вижу причины изменения, и код выглядит так же меня (просто "рефакторинг"). Итак, старый был:
{
auto && __range = range_expression;
for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
Новый -
{
auto && __range = range_expression;
auto __begin = begin_expr;
auto __end = end_expr;
for ( ; __begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
Почему было сделано это изменение, и заставляет ли оно какие-либо легальные программы на C ++ 14 демонстрировать неопределенное поведение ( UB ) в C ++ 17?