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);工作?
因为该运算符定义为成员函数,而不是自由函数。
可以通过这两种方式来重载运算符,这两种方式在与常规运算符语法一起使用时对用户是透明的。但是,在使用显式语法时,必须使用特定于实际函数定义的语法。
此示例显示了实际的区别:
class Stream {
Stream& operator<<(Inside);
};
Stream& operator<<(Stream&, Outside);
Run Code Online (Sandbox Code Playgroud)
对于std::string,使用Outside方式。对于double,Inside是。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |