运算符重载confustion C ++

时间:2015-04-24 07:07:53

标签: c++

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;
}

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

1 个答案:

答案 0 :(得分:2)

一些评论。

首先,我建议您将std::保留在标准库的对象之前。这避免了很多名称冲突问题。

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

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

然后,在我看来,最好的是以下内容:

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