在其中尝试转换的序列如下:
完全匹配。用于调用函数的类型与函数原型中声明的类型之间的完全匹配始终是最佳匹配。常用转换的序列将归类为完全匹配。但是,不进行任何转换的序列被视为比进行转换的序列更佳:
- 从指针,到指向 const(type* 指向 consttype*)的指针。
- 从指针,到指向 volatile(type* 指向 volatiletype*)的指针。
- 从引用,到对 const(type & 到 const type &)的引用。
-
从引用,到对 volatile(type & 到 volatile type &)的引用。
使用提升的匹配。未归类为仅包含整型提升、从 float 到 double 的转换以及常用转换的完全匹配的任何序列将被归类为使用提升的匹配。尽管比不上完全匹配,但使用提升的匹配仍优于使用标准转换的匹配。
使用标准转换的匹配。未归类为完全匹配或仅包含标准转换和常用转换的使用提升的匹配的序列将归类为使用标准转换的匹配。在此类别中,以下规则将适用:
从指向派生类的指针到指向直接或间接基类的指针的转换优于到 void * 或 const void * 的转换。
从指向派生类的指针到指向基类的指针的转换会产生一个到直接基类的更好匹配。假定类层次结构如下图所示。演示首选转换的关系图
从 D* 类型到 C* 类型的转换优于从 D* 类型到 B* 类型的转换。同样,从 D* 类型到 B* 类型的转换优于从 D* 类型到 A* 类型的转换。
此同一规则适用于引用转换。从 D& 类型到 C& 类型的转换优于从 D& 类型到 B& 类型的转换等。











