每次我要创建像std::ostream
运算符这样的运算符来显示值(无运算符)时,我都会返回std::string
,但我不知道为什么。如果std::ofstream
用作函数成员运算符函数(std::cout
),我该如何返回它,何时应该返回它以及为什么?
示例:
class MyClass
{
int val;
std::ostream& operator<<(const std::ostream& os, const MyClass variable)
{
os << variable.val;
}
}
在std::string
:
std::string a("This is an example.");
std::cout << a;
答案 0 :(得分:6)
通常在重载ostream
时返回对<<
的引用,以允许链接。这样:
s << a << b;
相当于函数调用
operator<<(operator<<(s,a),b);
并且仅有效,因为内部调用返回一个合适的类型作为外部调用的参数。
要实现这一点,只需通过引用获取stream参数,并直接通过引用返回相同的流:
std::ostream & operator<<(std::ostream & s, thing const & t) {
// stream something from `t` into `s`
return s;
}
或从其他一些重载返回:
std::ostream & operator<<(std::ostream & s, thing const & t) {
return s << t.whatever();
}