我很好奇std :: cout是否有返回值,因为当我这样做时:
cout << cout << "";
打印一些hexa代码。这印刷价值的含义是什么?
答案 0 :(得分:19)
因为cout << cout
的操作数是用户定义的类型,所以表达式实际上是一个函数调用。编译器必须找到与操作数匹配的最佳operator<<
,在这种情况下,它们都是std::ostream
类型。
有许多候选运算符重载可供选择,但我只是按照通常的重载决策过程描述最终被选中的运算符。
std::ostream
有一个允许转换为void*
的转换运算符。这用于将流的状态测试作为布尔条件(即,它允许if (cout)
工作)。
右侧操作数表达式cout
使用此转换运算符隐式转换为void const*
,然后operator<<
重载转换为ostream&
和void const*
调用此指针值。
请注意,ostream
到void*
转换产生的实际值未指定。规范仅强制要求如果流处于错误状态,则返回空指针,否则返回非空指针。
流插入的operator<<
重载确实有返回值:它们返回作为操作数提供的流。这允许链接插入操作(以及输入流,使用>>
的提取操作)。
答案 1 :(得分:14)
cout
没有返回值。 cout
是ostream
类型的对象。 operator <<
有一个返回值,它返回对cout
的引用。
请参阅http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/以供参考。
匹配的唯一签名是:
ostream&amp;运营商LT;&LT; (ostream&amp;(* pf)(ostream&amp;));
所以它返回指向 operator<<
成员的指针。
答案 2 :(得分:1)
我相信那是“”打印到
的ostream对象的地址