【发布时间】:2021-02-12 23:13:23
【问题描述】:
发送到ostream时可以直接退货吗?
例如,不要写:
ostream& operator<<(ostream& os, Foo foo) {
os << foo.a << foo.b;
return os;
}
我可以直接写吗:
ostream& operator<<(ostream& os, Foo foo) {
return os << foo.a << foo.b;
}
我试过了,它似乎有效,但我不知道这样做是否正确。做第二个版本有问题吗?
【问题讨论】:
-
你用你的编译器试过了吗?
-
是的,它似乎有效,但我不知道这样做是否正确
-
在实现像您的示例这样非常简单的流运算符时,这是安全且非常正常的做法。
-
之所以有效,是因为每个重载的流运算符都返回
std::ostream&。因此,return之后的整个表达式返回std::ostream&。流操作符(实际上是operator<<)是左关联的。因此,os << foo.a << foo.b被评估为((os << foo.a) << foo.b)。 -
为什么你认为它可能是错误的?如果您不添加为什么认为这是错误的,我们无法对此发表评论。
标签: c++ operator-overloading ostream