std :: cout有返回值吗?

时间:2012-06-11 20:35:05

标签: c++ return cout

我很好奇std :: cout是否有返回值,因为当我这样做时:

cout << cout << "";

打印一些hexa代码。这印刷价值的含义是什么?

3 个答案:

答案 0 :(得分:19)

因为cout << cout的操作数是用户定义的类型,所以表达式实际上是一个函数调用。编译器必须找到与操作数匹配的最佳operator<<,在这种情况下,它们都是std::ostream类型。

有许多候选运算符重载可供选择,但我只是按照通常的重载决策过程描述最终被选中的运算符。

std::ostream有一个允许转换为void*的转换运算符。这用于将流的状态测试作为布尔条件(即,它允许if (cout)工作)。

右侧操作数表达式cout使用此转换运算符隐式转换为void const*,然后operator<<重载转换为ostream&void const*调用此指针值。

请注意,ostreamvoid*转换产生的实际值未指定。规范仅强制要求如果流处于错误状态,则返回空指针,否则返回非空指针。


流插入的operator<<重载确实有返回值:它们返回作为操作数提供的流。这允许链接插入操作(以及输入流,使用>>的提取操作)。

答案 1 :(得分:14)

cout 没有返回值coutostream类型的对象。 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对象的地址