use*_*202 1 c++ iterator const reference value-type
我有以下功能和矢量:
template <class RandomIterator> RandomIterator upperBound(RandomIterator start, RandomIterator end, const typename iterator_traits<RandomIterator>::reference t);
vector<int> v{1,2,3,3,4};
Run Code Online (Sandbox Code Playgroud)
但是当我打电话时它不起作用:
upperBound(v.begin(), v.end(), 1);
Run Code Online (Sandbox Code Playgroud)
错误(来自g ++和clang ++)有点像"期待左值;不能将rvalue传递给3参数".但是,不应该有以下两种类型
const typename iterator_traits<RandomIterator>::reference
const typename iterator_traits<RandomIterator>::value_type&
Run Code Online (Sandbox Code Playgroud)
相当于编译器?
通过这种方式,将功能规格更改为
template <class RandomIterator> RandomIterator upperBound(RandomIterator start, RandomIterator end, const typename iterator_traits<RandomIterator>::value_type& t);
Run Code Online (Sandbox Code Playgroud)
一切正常.
不,他们不等同.如果有const some_typedef,则const适用于typedef的最外层类型.因此,如果some_typedef是引用类型(在您的情况下是它),则const适用于引用.由于没有const引用类型这样的东西,所以const会被忽略.
也就是说,如果向量的元素类型是int,则:
const typename iterator_traits<RandomIterator>::reference变得int& const等同于正义int&.const typename iterator_traits<RandomIterator>::value_type&成为const int&.| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |