std::ostream & _return = ::operator<<(_os, _event)
特别是我想知道:_return
的数据类型是什么,如何在控制台中打印它。
答案 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
上的操作将以多态方式调用的对象类型。这可以是ofstream
,ostringstream
或许多其他类型。
如何在控制台中打印。
在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);