我回到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;
}
}
Run Code Online (Sandbox Code Playgroud)
上std::string:
std::string a("This is an example.");
std::cout << a;
Run Code Online (Sandbox Code Playgroud)
传统的做法是返回ostream过载时的引用<<,以允许链接.这个:
s << a << b;
Run Code Online (Sandbox Code Playgroud)
相当于函数调用
operator<<(operator<<(s,a),b);
Run Code Online (Sandbox Code Playgroud)
并且只能工作,因为内部调用返回一个合适的类型作为外部调用的参数.
要实现这一点,只需通过引用获取stream参数,并直接通过引用返回相同的流:
std::ostream & operator<<(std::ostream & s, thing const & t) {
// stream something from `t` into `s`
return s;
}
Run Code Online (Sandbox Code Playgroud)
或者从其他一些重载返回:
std::ostream & operator<<(std::ostream & s, thing const & t) {
return s << t.whatever();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |