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