在const方法中更改对象状态

时间:2015-11-08 16:52:27

标签: c++ class c++11 const

我的课程类似于:

class A{
    std::string tmp;
public:
    const std::string &doSomething() const{
       tmp = "something";
       return tmp; 
    }
};

方法doSomething()非常重要const并返回引用而不是字符串本身。

我看到的唯一方法是使用动态分配,例如类似的东西:

class A{
    MyClass *tmp = new MyClass();
public:
    const MyClass &doSomething() const{
       *tmp = "something";
       return *tmp; 
    }
};

tmp变量"占位符"仅在doSomething()内使用。

还有其他一些更清晰,更好的方法来进行这种临时值存储吗?

3 个答案:

答案 0 :(得分:2)

您可以在mutable上使用std::string tmp修饰符:

class A {
  mutable std::string tmp;
  ...
}

这将允许const方法修改该成员。

答案 1 :(得分:0)

查看mutable关键字以声明tmp

答案 2 :(得分:0)

如果尝试修改属性,则应退出方法签名的const限定符:

的std :: string&安培; doSomething(){...}

如果您不想修改它,并且您希望确保该方法返回您正在等待接收的内容:

const std :: string& doSomething()const {...}

返回const引用是确保引用不会更改值的最佳方法。但是在返回类型之前没有const限定符也应该可以正常工作,因为第二个const限定符(指定该方法不应该修改当前对象)

总之,我完全赞同@juanchopanza 干杯