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

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

4

2 回答 2

2

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;

在这里,它本身的静态类型是- 对(标准输出流)对象的引用,但运行时类型将是任何类型......这就是操作将以多态方式调用的对象类型。这可能是,或许多其他类型。_returnstd::ostream&std::ostream_os_returnofstreamostringstream

如何在控制台中打印它。

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

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

(对于 GCC,请参阅Unmangling the result of std::type_info::name以获取有关 unmangling 此类类型名称的提示)

于 2013-06-27T05:56:59.457 回答
0

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

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

于 2013-06-27T05:47:12.640 回答