操作员的操作符重载

Hab*_*wad 5 c++ operator-overloading

我认为以下代码可用于创建操纵器.

#include<iostream> 
ostream & symbol(ostream & output)
{
  return output << "\tRs";
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.以下声明

  cout << "Total amount: " << 567 << symbol; 
Run Code Online (Sandbox Code Playgroud)

给出输出

 Total amount: 567   Rs
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么它有效.我有关于C++中的运算符重载的以下信息.

  1. 只有现有的运营商才能超载.无法创建新运算符.但该符号不是现有的运营商.

  2. 在语句中(cout <<"总量:"<< 567 <<符号;),似乎<<是重载运算符而符号是变量/对象.但我没有将符号声明为变量/对象.

  3. 为什么他们使用return语句(返回输出<<"\ tRs";)?我认为(返回"\ tRs";)或(输出<<"\ tRs";)应该有用.(我试过但不工作:))

其实我不知道上面的代码是如何工作的.有没有人解释上述运算符重载的工作原理?

Att*_*ila 7

您正在将该功能 传递symbol给操作员<<.该<<会呼吁目前的ostream该功能(与ostream的对象作为参数),从而实现您看到的结果.(<<被调用的确切版本是:ostream::operator<< (ostream& ( *pf )(ostream&));- 有关详细信息,请参阅参考资料)

返回类型是ostream允许链接多个<<.在特定情况下,您不需要技术上<<可以访问流,但这是为了使其与运营商保持一致(我认为).当然<<需要这个返回参数,所以你别无选择:)


Oli*_*rth 5

std::ostream::operator<<类型的函数指针重载ostream &(*)(ostream &).行为只是调用函数*this.

这就是std::hex工作的方式.