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;
}
를 얻을 수 있지만, const를 참조 반환이 (컴파일 오류가) 작동하지 않습니다. 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
또는 당신은 단지 데이터 멤버를 공개하고 정확히 같은 제한이있을 수 있습니다 : 그것은 const
자격의에
push_back의 의미가 이름이 말하는 경우 const (참조)를 push_back 할 수 없습니다. 이는 push_back이 뒤로 밀려서 데이터 내용을 변경하기 때문입니다. – thang