任何人解释C ++代码的行

时间:2013-06-27 05:44:09

标签: c++ testcase

std::ostream & _return  = ::operator<<(_os, _event)

特别是我想知道:_return的数据类型是什么,如何在控制台中打印它。

2 个答案:

答案 0 :(得分:2)

  

std :: ostream&amp; _return = :: operator&lt;&lt;(_ os,_event);

     

特别是我想知道:_return的数据类型是什么,如何在控制台中打印它。

代码在全局范围(不在任何命名空间中)查找operator<<,它可以接受_os_event个对象作为参数。这不一定是真的,但给出了“&lt;&lt;”流式输出是用C ++完成的正常方式,你可以期待它可能是一个函数,如:

std::ostream& operator<<(std::ostream&, const Event&);

事件是_event对象具有的任何类型,我假设_os将是 std::ostream派生的某种类型,因此能够通过对std::ostream的引用来处理。

几乎所有这样的operator<<函数都返回它们的第一个流参数,所以你的代码可能正在做一些输出,然后有效地分配给_return,就好像它是:

  

的std :: ostream的&安培; _return = _os;

这里,_return本身的静态类型是std::ostream& - 对std::ostream(标准输出流)对象的引用,但是运行时type将是_os具有的任何类型...这是_return上的操作将以多态方式调用的对象类型。这可以是ofstreamostringstream或许多其他类型。

  

如何在控制台中打印。

在C ++中没有标准的方法来获取文本类型名称,尽管运行时多态类型确实有运行时类型信息,其中包含一个可选的文本字段,该字段通常填充了某种类型的名称 - 它是否具有完整的命名空间限定符,名称错误或任何未指定的名称,但您可以轻松地尝试:

std::cout << typeid(_return).name() << '\n';

(有关GCC的信息,请参阅Unmangling the result of std::type_info::name了解有关解除此类型名称的提示)

答案 1 :(得分:0)

_return只是“引用std::ostream类对象”类型的变量。 并使用全局命名空间<<中的::operator<<(ostream& os, const some_Obj_reference& ref)运算符的返回值进行初始化。

Ttis也可以 std::ostream & _return = (_os <<_event);