std::ostream & _return = ::operator<<(_os, _event)
特别是我想知道:数据类型是什么_return
以及如何在控制台中打印它。
std::ostream & _return = ::operator<<(_os, _event);
特别是我想知道:_return 的数据类型是什么以及如何在控制台中打印它。
该代码查找一个operator<<
at 全局范围(不在任何命名空间中),它可以接受_os
和_event
对象作为参数。这不一定是真的,但鉴于“<<”是在 C++ 中完成流式输出的正常方式,您可以预期它可能是一个函数,例如:
std::ostream& operator<<(std::ostream&, const Event&);
其中 Event 是_event
对象具有的任何类型,我假设_os
将是从 派生的 std::ostream
某种类型,因此可以通过对std::ostream
.
几乎所有此类operator<<
函数都返回它们的第一个流参数,因此您的代码可能正在执行一些输出,然后有效地分配给,_return
就好像它是:
std::ostream& _return = _os;
在这里,它本身的静态类型是- 对(标准输出流)对象的引用,但运行时类型将是任何类型......这就是操作将以多态方式调用的对象类型。这可能是,或许多其他类型。_return
std::ostream&
std::ostream
_os
_return
ofstream
ostringstream
如何在控制台中打印它。
在 C++ 中没有获取文本类型名称的标准方法,尽管运行时多态类型确实具有运行时类型信息,其中包括一个可选的文本字段,该字段通常填充有某种类型的名称——无论它是否具有完整的命名空间限定符、名称修饰或任何未指定的内容,但您可以轻松尝试:
std::cout << typeid(_return).name() << '\n';
(对于 GCC,请参阅Unmangling the result of std::type_info::name以获取有关 unmangling 此类类型名称的提示)
_return
只是“引用std::ostream
类对象”类型的变量。<<
并使用全局命名空间中的 operator的返回值对其进行初始化::operator<<(ostream& os, const some_Obj_reference& ref)
。
Ttis也可以
std::ostream & _return = (_os <<_event);