typedef vector<int> intvec;
class MyClass
{
intvec m_member;
public:
const intvec& GetVec();
};
const intvec& MyClass::GetVec()
{
return m_member;
}
int main(int argc, char *argv[])
{
MyClass myClassObj;
myClassObj.GetVec().push_back(11); //This doesn't work with const reference
myClassObj.GetVec().push_back(22); //This doesn't work with const reference
for(intvec::const_iterator iter = myClassObj.GetVec().begin(); iter != myClassObj.GetVec().end(); ++iter)
{
cout << *iter << ", " ;
}
cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
如果 GetVec()
的返回类型是非 const 引用,则 myClassObj.GetVec().push_back(11);
有效,但对于 const 引用 return 这不起作用不工作(编译错误)。我知道如果 GetVec() 方法本身是常量,即 const intvec& GetVec() const;
,那么 myClassObj.GetVec().push_back(11);
不会工作,因为这意味着修改“this”指针。
最佳答案
您可以根据 const
限定条件重载该函数:
const intvec& GetVec() const; // Can access, but not modify, a const object
intvec& GetVec(); // Can access or modify a non-const object
或者您可以只公开数据成员并具有完全相同的限制。访问器函数没有什么意义,除非它们用于限制访问或维护类不变量,而这些不是。
关于c++ - 从成员 get 方法返回 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748250/