看完ostream::operator <<c ++参考后,
我注意到以下声明:
ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (void* val);
ostream& operator<< (streambuf* sb );
ostream& operator<< (ostream& (*pf)(ostream&));
ostream& operator<< (ios& (*pf)(ios&));
ostream& operator<< (ios_base& (*pf)(ios_base&));
Run Code Online (Sandbox Code Playgroud)
但后来我发现还有以下声明:
ostream& operator<< (ostream& os, char c);
ostream& operator<< (ostream& os, signed char c);
ostream& operator<< (ostream& os, unsigned char c);
ostream& operator<< (ostream& os, const char* s);
ostream& operator<< (ostream& os, const signed char* s);
ostream& operator<< (ostream& os, const unsigned char* s);
Run Code Online (Sandbox Code Playgroud)
为什么char/string输出运算符不是成员函数?
第一组运算符是流类的成员.
大多数操作员重载,如第二组中的那些,都不是.
至于原因,这可能只是一次历史性事故.内置类型的运算符可以添加到流类中,显然它们是(在C++标准化之前很久).该标准只是记录了现有的做法.
用户定义类型的运算符显然无法添加到流类中,因此它们实现为自由函数.
回想起来,让所有运营商免费使用功能会更加一致,但这可能会破坏一些旧的程序.
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |