const正确性和成员参考

Irb*_*bis -1 c++ const

我有以下课程:

class DataBuilder
{
public:
    DataBuilder(Data& data): data_(data){}

    //Fun modify data_, uses private methods
    void Fun(std::string name, int id) //const ?
    { 
        //calculate newInfo based on params (uses private methods)
        auto& info = data_.GetInfo();
        info = newInfo;
    }
private:
    //some private methods
    Data& data_;
};
Run Code Online (Sandbox Code Playgroud)

理论上有趣可以是const,但我想知道它是否正确(逻辑常量)?

Edit1我添加了一个非常简化的Fun实现. Edit2 Data有两个GetInfo重载:

Info& Data::GetInfo();
const Info& Data::GetInfo() const;
Run Code Online (Sandbox Code Playgroud)

Cal*_*eth 5

const在此上下文中表示"不修改对象",这是通过将隐式处理this为指向const的指令来强制执行的.出于这个原因,通常会看到类似的重载

Data       & getData();
Data const & getData() const;
Run Code Online (Sandbox Code Playgroud)

这保留了const调用上下文的内容,并允许修改Data在非const上下文中调用的时间.

在你的情况下,你没有Info & Data::getInfo const;(这将是相当可疑的,Dataconst Info从哪里得到非const ?)Fun正在修改data_成员DataBuilder.

旁白:我会把作业写成 data.GetInfo() = newInfo;