【发布时间】:2015-06-01 21:13:27
【问题描述】:
在下面的代码中,为什么foo::func 的返回类型是vector<int>::const_iterator 而不是vector<int>::iterator,尽管我返回的是vector<int>::iterator 的对象。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class foo
{
private:
vector<int> ar;
public:
foo()
{
ar.resize(10);
iota(ar.begin(), ar.end(), 1);
}
auto func() const
{
return ar.begin() + 5;
}
};
int main()
{
foo x;
cout<<boolalpha<<endl;
auto it = x.func();
cout<<is_same<decltype(it), vector<int>::iterator>::value<<endl;
cout<<is_same<decltype(it), vector<int>::const_iterator>::value<<endl;
return 0;
}
以上代码的输出是:
false
true
如果我将foo::func() 重新定义为
auto func()
{
return ar.begin() + 5;
}
输出将是
true
false
为什么常量成员函数将返回类型更改为常量?
我是否需要删除 const 关键字以使返回类型为 vector<int>::iterator 还是有其他方法?
【问题讨论】:
-
ar是const vector<int>内auto func() const类型的左值。 -
const_iterator begin() const;在访问向量ar是const时被调用,这是因为func() const说是。