从零单排c++ primer(14)

(1)区分移动和拷贝的重载函数通常有一个版本接受一个const T&,而另一个版本接受一个 T&&。
(2)如果一个成员函数有引用限定符,则具有相同参数列表的所有版本都必须有引用限定符。
(3)当运算符作用域类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。
(4)重载的运算符是具有特殊名字的函数,它们的名字由关键字operator和其后要定义的运算符共同组成。
(5) 重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。
(6) 当一个重载的运算符石成员函数时,this绑定到左侧运算对象。成员运算符函数的显式参数数量比运算对象的数量少一个。
(7)对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数,当运算符作用于内置类型的运算对象时,我们无法改变运算符的含义。
(8)通常情况下,不应重载逗号,取地址,逻辑与和逻辑或运算符。
(9)重载运算符的返回类型通常情况下应该与其内置版本的返回类型兼容。
(10)通常,输出运算符应该主要负责打印对象的内容而非控制格式,输出运算符不应该打印换行符。
(11) 与iostream标准库兼容的输入输出运算符必须是普通的非成员函数,而不能是类的成员函数,否则,它们的左侧运算符对象将是类的一个对象。
(12)输入运算符必须处理输入可能失败的情况,而输出运算符不需要,当读取操作发生错误时,输入运算符应该负责从错误中恢复
(13)通常情况下,把算术和关系运算符定义成非成员函数以允许对左侧或右侧的运算对象进行转换。
(14)重载赋值运算符,无论形参的类型是什么,赋值运算符都必须定义为成员函数。
(15) 下标运算符必须是成员函数,如果一个类包含下标运算符,则它通常会定义两个版本:一个返回普通引用,另一个是类的常量成员并且返回常量引用。
(16) 函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或类型上有所区别。
(17) 类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换成其他类型。
(18)一个类型转换函数必须是类的成员函数;它不能声明返回类型,形参列表也必须为空。类型转换函数通常应该是const。
(19)向bool的类型转换通常在条件部分,因此operator bool 一般定义成explicit的。
(20) 当使用两个用户定义的类型转换时,如果转换函数之前或之后存在标准类型转换,则标准类型转换将决定最佳匹配到底是哪个。
(21)如果在调用重载函数时我们需要使用构造函数或者强制类型转换来改变实参的类型,则这通常意味着程序设计存在不足。
(22)在调用重载函数时,如果需要额外的标准类型转换,则该转换的级别只有当所有可行函数都请求同一个用户定义的类型转换时才有用。如果所需的用户定义的类型转换不止一个,则该调用具有二义性。
(23)表达式中运算符的候选函数集既应该包括成员函数,也应该包括非成员函数。
(24)如果对同一个类既提供了转换目标是算术类型的类型转换,也提供了重载的运算符,则将会遇到重载运算符与内置运算符的二义性问题。

你可能感兴趣的:(C++,学习,语言,VC,C++Primer)