[英]Difference between `cout << x` and `cout.operator <<(x)`?
[英]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的变量时,它会产生编译错误。
任何人都可以对正在发生的事情进行初级到中级的解释吗?
cout << expr
和cout.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.