Dan*_*any 2 c++ struct constants operator-keyword
我正在观看这个关于 C++ 最佳实践的研讨会,演讲者给出了以下代码示例:
struct Data{
int x;
int y;
bool operator==(Data &rhs){
return x == rhs.x && y == rhs.y;
}
};
Run Code Online (Sandbox Code Playgroud)
然后他问这段代码中缺少什么。作为一个新手,我以为没有遗漏什么,但后来他指出const缺少 2 个关键字,如下所示:
struct Data{
int x;
int y;
bool operator==(const Data &rhs) const{
return x == rhs.x && y == rhs.y;
}
};
Run Code Online (Sandbox Code Playgroud)
现在我认为这就像一个不修改对象的承诺。但有人可以解释为什么这些const关键字是必要的吗?
const如果您的 中的两个位置都没有operator==,则不会编译:
void foo(const Data& lhs, const Data& rhs) {
if(lhs == rhs) { // requires `operator==(const Data &rhs) const`
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这是强制性的
它不是——但这是一个很好的实践——如果不以这种方式实现它,将严重抑制与标准(和其他)库交互的能力。
您的目标不是更改您引用的参数值。如果该参数是const并且您通过 a 获取它,const&那么您仍然可以在函数中读取它。如果你的声明只说了Data& rhs,它就不会编译。
您的目标不是改变*this(操作员左侧==)的状态。这同样适用于此。如果*this是const,const则成员函数上的限定符仍然可以使用该成员函数。