运算符重载混淆C++

Operator overloading confustion C++

本文关键字:C++ 重载 运算符      更新时间:2023-10-16
std::ostream &operator <<(std::ostream &o, date &d)
{
    return o << d.year << d.month << d.day;
}

std::ostream &operator <<(std::ostream &o, date &d)
{
    o << d.year << d.month << d.day;
    return o;
}

以下哪一个是正确的语法,或者它们都是正确且可互换的?此外,在所有情况下,我们都需要大括号,任何规则,都太混乱了。

一些评论。

首先,我鼓励您在标准图书馆的对象之前保持std::。这避免了许多名称冲突问题。

对我来说,第二个版本更好,因为operator <<可能会被其他用户超载,有时写得不好,返回丢失。然后,第一个语法将失败。

此外,通常,在流中转储对象不会修改它。然后,传递对象常量。

那么,在我看来,最好的是以下几点:

std::ostream& operator << (std::ostream& out, const Date& date)
{
  out << date.year << "-" << date.month << "-" << date.day;
  return out;
}