我只是好奇如果我明确地调用会发生什么operator<<
,std::cout
因为我了解到这a.operator()
与a()
. 所以我这样做了,它打印出一些奇怪的东西:
#include <iostream>
using std::cout;
int main()
{
cout.operator<<("Hello World");
}
Output: 0x80486a0
奇怪的是,它输出了一个地址(地址可能对你不同,但它仍然应该是一个地址)。我在想这是字符串的地址,所以我尝试取消引用它以使其输出字符串:
*( cout.operator<<("Hello World") );
但我得到一个很长的错误
no match for operator* in '*std::cout.std::basic_ostream<...
我觉得这很奇怪。定义中的任何内容都不std::cout
会让我相信这会导致任何不同的行为;还考虑到显式调用运算符函数没有区别(或至少应该)。
那么为什么我会得到这个输出呢?为什么在显式调用运算符时收到地址而不是字符串本身?这甚至是内存中的地址还是只是垃圾输出?任何回应表示赞赏。