如何攻克 C++ 中复杂的类型转换?( 四 )


参考以下代码:
struct A { int i; };struct B { int i; };struct C: A, B { int i; };struct D: A, B {};int main{C.i; // 访问C::iD.i; // Error!存在二义性!}对于类 C,由于其自身定义了变量 i,故访问 C 类的i变量时并未发生向上类型转换 。而对于类 D,由于其自身没有定义变量 i,故访问D 类的i变量时需要在其各个基类中分别进行查找 。由于编译器发现D -> A -> i 与 D -> B -> i 这两种查找路线都是可行的,故此时编译器判定此查找存在二义性 。
 
6.其它隐式类型转换C++ 中还定义了一些特殊的类型转换,以下列举出一些常见的情况:
1. 0 转换为空指针
int main{int *p = 0;}2. 数组退化为指针
int main{int a[10];int *p = a;}3. 空指针或数字 0 转为 false,其它指针或数字转为 true
int main{if(ptr) {}if (2) {}}4. T转换为 void
int main{void *p = new int;}5. 非 const 转换为 const
int main{int *a;const int * const b = a;}作者简介:樱雨楼,毕业于生物信息学专业,是一枚Python/C++/Perl开发,自称R语言黑粉,Github勾搭:https://github.com/yingyulou
【END】

【如何攻克 C++ 中复杂的类型转换?】


推荐阅读