c++ - 从成员 get 方法返回 const 引用

标签 c++ class methods constants member

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/

相关文章:

Java - 找不到符号构造函数

javascript - Node readline 模块没有 'on' 功能?

c++ - 编写自己的流媒体运算符时如何检查当前的 ostream dec/hex 模式?

c++ - C++ 中的 CreateObject 等价物

c++ - 从 SDL2 表面创建 OpenGL 纹理 - 奇怪的像素值

css - VB.Net 查找埋在 DOM 中时要单击的类 ID

java - 方法中的私有(private)类 - java

C++ 用 cin 做 while 循环

Android 找不到以下类 - EditText(更改为 android.widget.EditText、修复构建路径、编辑 XML)

iphone - 调用另一个类的方法(例如通过单例类)?