sky*_*ack 5 c++ language-lawyer c++11 c++14 c++17
从C++ 11到C++ 17,range-for循环等效于以下代码:
{
auto && __range = range_expression ;
for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
Run Code Online (Sandbox Code Playgroud)
从C++ 17开始,等价将(显然)更新为这个:
{
auto && __range = range_expression ;
auto __begin = begin_expr ;
auto __end = end_expr ;
for ( ; __begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
}
Run Code Online (Sandbox Code Playgroud)
乍一看,我能看到的唯一区别在于,__begin并且__end不再共享类型,只要它们(让我说)可比较.
还有其他原因需要这种改变吗?