语法扩展
函数前面加上explict可以防止参数发生隐式类型转换, 用于构造函数和operator中
不要将explict与delete共用, 因为这相当于删去了显式转换版本的函数, 可能会留下默认的隐式转换的实现...可行的保留并计算匹配的精确度, 选择最佳匹配的候选函数作为结果
如果存在两个相同匹配等级的参数列, 优先保留普通函数
完全找不到匹配的函数或者产生二义性时, 引发error
这个尝试进行参数替换的过程中编译器只发生..., Test更符合f1的参数, 因此实例化f1
f(10);
// 只能调用f2, 因为在这个匹配过程中若把int替换到f1的参数列中, int没有定义foo, 失败
// 由于...如果目标是被重载的函数则编译错误
否则, 对于带括号的表达式, 如果目标是将亡值, 那么返回右值引用
对于带括号的表达式, 如果目标是左值, 返回左值引用
否则返回目标本身类型
推导四规则中最麻烦的是规则...而且由于其本质是常量数值的原因, enum成员总是可以被隐式转换为整型, 这很容易导致比较两个不同的枚举名称时出现错误的结果
C++11之前会通过类结构将枚举封装, 并建立新的转换和比较函数覆盖原先的操作