C++ return 直接来自 operator<<

C++ return directly from operator<<

是否可以在发送到ostream时直接return?

例如,而不是写:

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

我试过了,似乎可行,但我不知道这样做是否正确。做第二版有问题吗?

Is it allowed to directly return while we are sending to ostream?

是的,允许。

您post的两个代码片段完全等价。

为什么?因为(为了论证,我在这里假设 foo.afoo.b 是像 int 这样的简单数据类型) << operator for std::ostream returns a 对自身的引用(参见链接文档中的“Return 值”部分)。

因此,在您的第一个代码片段中,return os; 行 returns 是对第一个参数引用的 os 对象的引用。在你的第二个片段中,两个 << 操作每个评估为对同一对象的引用......所以你返回对 完全相同的 对象的引用。

为了使第二个版本更清楚一点,您可能希望将返回的表达式括在括号中:

ostream& operator<<(ostream& os, Foo foo) {
    return (os << foo.a << foo.b);
}