参考以下代码:
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++ 中复杂的类型转换?】
推荐阅读
- 梦见猴子缠着我甩不掉最后死了 梦见猴子缠着我甩不掉如何甩掉
- 局域网MAC地址认证上网如何实现
- C和C++标准库,这是什么玩意?
- 喝茶前如何洗茶 避免误操作的三大要领
- VLAN工作原理之ACCESS:接收到带VLAN的报文如何处理
- 如何选购与冲泡陈年普洱茶
- 胡萝卜炖排骨汤如何做才好吃?
- 红茶有哪些类别红茶类别如何区分
- 170男生如何穿搭,穿搭显高秘籍都在这里了,快来学习吧
- 阿里巴巴网店怎么开啊流程是怎样 如何阿里巴巴开店步骤