如果我们有这个类的定义

class BusDetails
{
private:
    string m_busName;
public:
    string BusName() const { return m_busName; }
};


如何更改或使用getter方法,以便将返回值用作左值会导致编译器错误?

例如,如果我像这样使用

int main(void)
{
    BusDetails bus;

    bus.BusName() = "abc";    // <--- This should give a compiler error
    cout << bus.BusName() << endl;

    return 0;
}


我没有收到编译器错误,因此显然赋值有效,但结果与预期不符。

更新:此行为是内置类型所预期的(即,如果我将int作为返回类型而不是string,则编译器会在上述代码行给出错误)。

最佳答案

BusName()被声明为const函数。因此它不能更改成员。
您的函数应返回string&而不是const。

string& BusName() { return m_busName; }


另外,您可以添加const对象(this是const):

const string& BusName() const { return m_busName; }

关于c++ - 如何编写getter方法以使其返回右值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20373236/

10-11 15:42