C++ Primer Chapter 14-1

来源:互联网 发布:python sql显示前10行 编辑:程序博客网 时间:2024/06/05 03:23
1: 除重载函数调用运算符 operator() 之外,所有其他重载运算符不能包含默认实参

2: 当一个运算符是成员函数时,他的显示实参总是比运算符运算对少一个,因为左侧对象会被绑定到隐式的 this 指针上。非成员则参数与运算对象个数一样。

3:内置类型的运算符是不可以重载的。

4:运算符的调用可以用间接的方法,就是一般我们所用的加减乘除那种,也可以
  1. operator+(data1,data2
普通函数的调用

5:对于某些有求值顺序的运算符,因为重载无法保留运算符求值顺序或者短路属性,所以不可以重载该类运算符。一般不要重载逗号、取地址、逻辑与、逻辑或,这些运算符。

6:运算符的返回类型通常情况下应该内置内型返回类型兼容

7:对于重载运算符来说,一定不要清晰,不能有二义性,否则就不是好的重载。

8:我们应该选择好运算符是为成员函数还是普通函数。一般规则 见 page493

9:对于有对称性的运算符,或者运算符调用具有不确定性对象的运算符,一般为非成员函数。比如double + int ,可以改成 int + double.这就是对称的运算。

10:string 的非成员函数 operator+ 
  1. string s = "world";
  2. string t = s + "!";
  3. string u = "hi" + s;
这里的第三行,类似于调用 
  1. operator+("hi",s);
这样 "hi" 可以正确的转换为 string 便可以了。两个参数中有一个 string 类型就行了。

11: operator << (ostream &, const T &)
第一个参数为不可以赋值的 ostream 的引用,第二个参数是一个常量引用避免拷贝,然后避免修改

12:输出运算符应当尽量减少格式控制,把格式控制留给用户来控制更好!否则用户得不到自己想要的格式。也必须是非成员函数。因为 ostream 不可能使我们的一个对象。一般为友元!
0 0
原创粉丝点击