繁体   English   中英

了解cout.operator <<()的行为

[英]Understanding behavior of cout.operator<<()

根据这个问题的最佳答案, cout << expr相当于cout.operator<<(expr)

根据对这个问题的答复,上述说法是不真实的。

根据我自己的测试,当给定整数时, cout.operator<<()cout <<相同。 给定一个float时, cout.operator<<()cout.operator<<()转换为整数。 当给出字符串文字时,如cout.operator<<("hello world") ,它输出看起来cout.operator<<("hello world")内存地址的内容。 当给定一个包含std :: string的变量时,它会产生编译错误。

任何人都可以对正在发生的事情进行初级到中级的解释吗?

这取决于expr

这两个问题的答案都是针对具体案例而非全面保证。

实际上,一些operator<< s是自由 函数 ,一些是成员函数

请参阅您最喜欢的C ++参考,找出哪些。

cout << exprcout.operator<<(expr)的等价性取决于expr是什么。

如果它是一个“内置”类型,那个cout “知道”,那么是的,它等同于cout.operator<<(expr) (一个成员函数)。

如果它是“用户类型”(并且std::string count here),则它是一个重载的非成员方法,其签名类似于std::ostream& operator<<(std::ostream&, const std::string&); 等等

为什么cout.operator<<("hello world")打印一个内存地址?

上面的最好的成员方法重载(因为它被强制使用成员方法,是ostream& operator<<(const void* value);它输出指针的值(而不是指向的内容)。

相比之下, cout << "hello world"调用非成员重载ostream& operator<<(ostream&, const char*) ,然后将每个字符插入输出中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM