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

时间:2016-06-24 16:26:30

标签: c++ stream 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;
}

输出: &#34; out0x600e08&#34;

任何想法为什么会这样以及如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

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