使用嵌套函数时,Ostream 输出提供额外地址

Ostream output gives extra adress, when using nested functions

我有几个函数带有处理 ostream 的开关来为要打印的对象指定确切的模板类型。 但是不知何故,当我使用嵌套函数时,额外的地址出现在输出流中。

代码示例:

#include <iostream>

using namespace std;


ostream & tmp2( ostream & in )
{
   return in << "out";
}

ostream & tmp( ostream & in )
{
   return in << tmp2( in );
}

int main(int argc, char** argv)
{
   int t = 2;
   switch (t)
   {
      case 2:
         std::cout << tmp;
   }
   return 0;
}

输出: "out0x600e08"

知道为什么会这样以及如何预防吗?

ostream & tmp( ostream & in )
{
   return in << tmp2( in );
}

相当于:

ostream & tmp( ostream & in )
{
   tmp2(in);
   in << in;   // This line causes the extra output.
   return in;
}

您可能打算使用:

ostream & tmp( ostream & in )
{
   return tmp2( in );
}