为什么这样做效果很好:
cout << "foo";
虽然这不是?
(&cout)->operator<<("foo");
它可以正常使用数值,所以我猜它是与覆盖相关的东西。 (我使用的是MS Visual C ++编译器。)
答案 0 :(得分:7)
operator<<
仅作为有限数量类型的成员函数实现。对于其他类型,它实现为全局重载,如:
std::ostream &operator<<(std::ostream &os, T const &t) {
// write the data here
}
您使用的语法仅适用于作为成员函数实现的重载,而不是全局变量。
答案 1 :(得分:1)
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");
答案 2 :(得分:0)
要将输出设为cout << "foo";
,您必须重载运算符<<
。