基于范围的for
语句在§6.5.4 中定义为等效于:
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}
}
其中range-init
为基于范围的两种形式定义为for
:
for ( for-range-declaration : expression ) => ( expression )
for ( for-range-declaration : braced-init-list ) => braced-init-list
(该子句进一步指定了其他子表达式的含义)
为什么__range
给出推导的类型auto&&
?我的理解auto&&
是,通过将表达式传递给std::forward
. 但是,__range
不会在任何地方通过std::forward
. 它仅在获取范围迭代器时使用,作为__range
、__range.begin()
或begin(__range)
.
使用“通用参考”有什么好处auto&&
?还auto&
不够吗?
注意:据我所知,该提案没有说明auto&&
.