fre*_*low 2 c++ iterator type-inference decltype c++11
是decltype(*it)迭代器的值类型,还是对它的左值引用,还是其他什么?
我认为这是一个左值参考,因为它是一个左*it值,但我不确定.
注意:在我的情况下,it是BidirectionalIterator,但随意回答一般情况.
*it不一定是左值.只有前向迭代器才有这个要求.
迭代器(第24.2.2节)必须*it是一个返回的有效表达式iterator_traits<Iterator>::reference(和其他不相关的东西).关于此没有其他说法,reference也不一定是参考类型†.
输入迭代器(第24.2.3节)必须*it是一个有效的表达式,它返回一个可转换为值类型的东西.
但是,前向迭代器具有以下要求(第24.2.5段第1段):
- 如果
X是一个可变的迭代器,reference是一个引用T; ifX是一个const迭代器,reference是一个引用const T,
(这T是迭代器的值类型)
这需要*it是一个引用,这意味着它必须是一个glvalue(即不能是一个prvalue,但可以像移动迭代器那样是一个xvalue).
较高的迭代器类别不会添加任何相关要求.
† reference被定义为*it使其具有圆形定义的类型,但不构成限制.