所有有关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