我有以下课程:
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)
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;
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |