在第一个代码提取中,所有参数都是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";
}
}