3

为什么这很好用:

cout << "foo";

虽然这没有?

(&cout)->operator<<("foo");

它适用于数值,所以我猜它与覆盖有关。(我正在使用 MS Visual C++ 编译器。)

4

3 回答 3

7

operator<<仅作为有限数量类型的成员函数实现。对于其他类型,它被实现为全局重载,例如:

std::ostream &operator<<(std::ostream &os, T const &t) { 
    // write the data here
}

您使用的语法仅适用于作为成员函数实现的重载,而不是作为全局函数。

于 2012-04-06T19:27:17.817 回答
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");
于 2012-04-06T19:59:08.583 回答
0

要获得输出cout << "foo";,您必须重载运算符<<

于 2012-04-06T19:32:42.773 回答