为什么这很好用:
cout << "foo";
虽然这没有?
(&cout)->operator<<("foo");
它适用于数值,所以我猜它与覆盖有关。(我正在使用 MS Visual C++ 编译器。)
operator<<
仅作为有限数量类型的成员函数实现。对于其他类型,它被实现为全局重载,例如:
std::ostream &operator<<(std::ostream &os, T const &t) {
// write the data here
}
您使用的语法仅适用于作为成员函数实现的重载,而不是作为全局函数。
cout
有一个重载的成员函数operator<<(const void *)
。这是最匹配的说法"foo"
。(const char*
隐式转换为const void*
。) 因此,将输出一个指针。
// These call std::ostream& operator<<(std::ostream &os, const char * val)
cout << "foo";
operator<<(cout,"foo");
// This calls cout's member function operator<<(const void * val)
(&cout)->operator<<("foo");
要获得输出cout << "foo";
,您必须重载运算符<<
。