重载==运算符时const参数是强制性的吗



在第一个代码提取中,所有参数都是const,代码编译成功。在第二个代码提取中,参数是非const,并且代码严重失败,返回消息:

可以是'bool operator==(Date&,Date&'[使用依赖于参数的查找找到]

这是因为==运算符必须接受const参数吗?

第一个

int serialDate() const
{
return m_date.serialNumber(); 
}
friend bool operator == (const Date& a, const Date& b)
{
return (a.serialDate() == b.serialDate());
}

第二

int serialDate()
{
return m_date.serialNumber(); 
}
friend bool operator == (Date& a, Date& b)
{
return (a.serialDate() == b.serialDate());
}

根据请求,这是我的第二个代码片段的代码,它通过对比较例程的(非常数(引用传入Date对象。

代码中有我添加的内容来填补缺失的部分。代码编译、运行并产生预期的输出。

#include <iostream>
using std::cout;
namespace {
struct SerialNumber {
int d;
int serialNumber() { return d; }
};
struct Date {
SerialNumber m_date;
int serialDate() {
return m_date.serialNumber();
}
friend bool operator==(Date& a, Date& b) {
return a.serialDate() == b.serialDate();
}
};
} // anon
int main() {
auto d1 = Date{{5}};
auto d2 = Date{{5}};
if (d1 == d2) {
cout << "These are the same date.n";
} else {
cout << "These are different dates.n";
}
}

最新更新