为什么'operator <<(cout,double)'不起作用?

Gab*_*ica 4 c++ overloading operators operator-keyword

我正在研究重载运算符。我<<double/ an 上使用-operator 并没有区别std::string

int main()
{
    double a = 12;
    string s = "example";

    operator<<(cout, a); //doesn't work
    cout.operator<<(a);  //works

    operator<<(cout, s); //works
    cout.operator<<(s);  //doesn't work   
}    
Run Code Online (Sandbox Code Playgroud)

为什么不operator<<(cout, a)cout.operator<<(s);工作?

Bar*_*icz 6

因为该运算符定义为成员函数,而不是自由函数。

可以通过这两种方式来重载运算符,这两种方式在与常规运算符语法一起使用时对用户是透明的。但是,在使用显式语法时,必须使用特定于实际函数定义的语法。

此示例显示了实际的区别:

class Stream {
    Stream& operator<<(Inside);
};

Stream& operator<<(Stream&, Outside);
Run Code Online (Sandbox Code Playgroud)

对于std::string,使用Outside方式。对于doubleInside是。