ostream deferencing operator<<

时间:2012-04-06 19:20:52

标签: c++ operators cout

为什么这样做效果很好:

cout << "foo";

虽然这不是?

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

它可以正常使用数值,所以我猜它是与覆盖相关的东西。 (我使用的是MS Visual C ++编译器。)

3 个答案:

答案 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";,您必须重载运算符<<