Google C ++风格的重载运算符<<

时间:2018-10-10 15:10:30

标签: c++

我尝试为班级重载operator <<,以便在执行此操作时打印成员     std :: cout << obj;

我知道这样做的方法是

std::ostream& operator<<(std::ostream& os, const T& obj)
{
  // write obj to stream

  return os;
}

What are the basic rules and idioms for operator overloading?

但是,我尝试使我的代码符合Google C ++样式指南 https://google.github.io/styleguide/cppguide.html#Reference_Arguments

它表示不允许传递不带const的引用,除非约定(例如swap())需要它。这个重载运算符<<与swap()属于同一类别吗?或者有办法做类似的事情

std::ostream& operator<<(std::ostream* os, const T& obj)
                                     ^

?或不使用非常量引用作为输入的内容。

如果是,请教我该怎么做。谢谢。

1 个答案:

答案 0 :(得分:7)

  

它说不允许传递没有const的引用,除非约定需要这种情况

好吧,该流通常以非常量引用的形式传递到流插入和提取运算符中,因此该规则似乎为您提供了例外。因此,尽管接受了非常量引用参数,但定义建议的重载仍应符合规则。

也就是说,我不是Google视为惯例的权威。如果您为Google工作,则应该知道问谁;如果您不这样做,那么您就不必对他们的风格感到压力。