我很好奇std :: cout是否有返回值,因为当我这样做时:
cout << cout << "";
Run Code Online (Sandbox Code Playgroud)
打印一些hexa代码.这印刷价值的含义是什么?
Jam*_*lis 19
因为操作数cout << cout是用户定义的类型,所以表达式实际上是函数调用.编译器必须找到operator<<与操作数匹配的最佳值,在本例中它们都是类型std::ostream.
有许多候选运算符重载可供选择,但我只是按照通常的重载决策过程描述最终被选中的那个.
std::ostream有一个转换运算符,允许转换为void*.这用于将流的状态测试作为布尔条件(即,它允许if (cout)工作).
右侧操作数表达式cout被隐式转换为void const*使用此转换运算符,然后调用a和a 的operator<<重载来写入此指针值.ostream&void const*
需要注意的是,从所得到的实际值ostream来void*转换是不确定的.规范仅强制要求如果流处于错误状态,则返回空指针,否则返回非空指针.
operator<<流插入的重载确实有一个返回值:它们返回作为操作数提供的流.这允许链接插入操作(以及输入流,使用提取操作>>).
Luc*_*ore 14
cout 没有返回值.cout是一个类型的对象ostream.operator <<有一个返回值,它返回一个引用cout.
请参阅http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/以供参考.
唯一匹配的签名是:
ostream&operator <<(ostream&(*pf)(ostream&));
所以它返回指向operator<<成员的指针.
詹姆斯答案中的一个.:)
| 归档时间: |
|
| 查看次数: |
9815 次 |
| 最近记录: |