为什么插入运算符是打印地址而不是字符串?

Pra*_*ari 12 c++ operator-overloading std visual-c++

我有简单的代码行,我使用插入运算符<<来显示hello world字符串.如果我使用运算符b那么它应该导致a.operator(b);我尝试使用插入运算符做同样的事情并且在输出中我得到字符串的地址,而不是实际的字符串.

std::cout<<"Hello world"<<std::endl;
std::cout.operator<<("Hello world").operator<<(std::endl);
Run Code Online (Sandbox Code Playgroud)

输出:

你好世界
0120CC74

我正在使用Visual Studio.

我的运营商转换有问题吗?

For*_*veR 18

std::cout<<"Hello world"<<std::endl;
Run Code Online (Sandbox Code Playgroud)

使用重载输出运算符const char*,即自由函数,而不是成员函数.

std::cout.operator<<("Hello world").operator<<(std::endl);
Run Code Online (Sandbox Code Playgroud)

使用重载输出运算符const void*,因为const char*可以隐式转换为const void*.

您可以在这里查看成员重载并在此处释放重载


luk*_*k32 5

我敢打赌,成员函数运算符std::ostream(char*)不会过载.

如果你看一下ostream :: operator <<,void*最好的匹配并char*自然地转换为它,而全局运算符<<(std :: basic_ostream),对于char*类型具有精确的重载,它被拾取.

当然,他们的行为也不同.