gpt4 book ai didi

C++ 直接从 operator<< 返回

转载 作者:行者123 更新时间:2023-12-03 06:54:24 25 4
gpt4 key购买 nike

是否允许在发送到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;
}

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

最佳答案

您发布的两个代码片段完全是等价的。

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

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

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

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

关于C++ 直接从 operator<< 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64609254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com