使用嵌套功能时,Ostream输出会提供额外的地址



我的功能很少,开关与Ostreams打开,以指定要打印对象的精确模板类型。但是当我使用嵌套功能时,以某种方式出现在输出流中。

代码示例:

#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 );
}

最新更新