所有有关operator<<的指南都指出您应该返回输出流:

ostream & operator<<(ostream &os, const Foo &x) { os<<"foo"; return os; }

但这难道不是更简单吗?
ostream & operator<<(ostream &os, const Foo &x) { return os<<"foo"; }

如果被调用的<<遵循指南并返回其第一个参数,则它应该100%相同。但是我依赖的是无法保证的东西吗?它在某些情况下会失败吗?

我为什么要它?不只是为了保存击键(我们不在codegolf.SE中)
实际用法有点复杂:
enum class Foo { A, B, C };
ostream & operator<<(ostream &os, const Foo &x) {
    switch (x) {
        case A: return os << "A";
        case B: return os << "B";
        case C: return os << "C";
    }
    return os << "Bad Foo (" << (int)x << ")";
}

与我发现的所有替代方法相比,多次返回使代码更简单易读(想象50种情况,而不是3种情况)。请注意,缺少default可使编译器警告丢失的情况,因此添加枚举值时您不会忘记添加一个。

最佳答案

由于它应该可以链接,因此简化应该可以进行,并且如果有问题的类定义不遵循约定,则编译将失败

任何地方

std::cout << a << b << std::endl;

将有效,您的简化也将有效,而没有真正的保证人就足够了

具体来说,可以保证问题中字符串文字的operator <<返回正确的ostream

10-06 04:56
查看更多