Effective_C++:26、防卫潜伏的ambiguity(模棱两可)状态

26、防卫潜伏的模棱两可状态

1、潜伏的模棱两可状态

潜伏的模棱两可状态,是指存在一种使用情景下使得程序出现模棱两可状态,而当这种场景被应用之前,模棱两可状态并没有出现(潜伏下来)。

2、防卫潜伏的模棱两可状态

1.将B对象转换为A型别,既可以通过A的构造函数,又可以通过B的转换函数。如下,在不使用f(b)前,程序的声明都是合法的,然而,当使用f(b)时,才发现存在模棱两可状态。若不使用f(b),这种状态将潜伏下来,直到有人使用而真正发生。

class B;
class A {
public:
    A(const B&);//A可由B构造
};
class B {
public:
    operator A() const;//B可以转换为A
};
void f(const A&);
B b;
f(b);//模棱两可状态,b如何变为A型别

2.隐式类型转换时可以转换为两个重载函数的参数类型。

void f(int);
void f(char);
double d = 6.02;
f(d);//模棱两可状态,d转换为哪种参数类型,使用哪个函数

3.多继承中,模棱两可状态更易存在。即派生类继承了两个基类相同名称的成员。不管成员的访问权限是哪种,只要有相同名称,便存在这个问题(因为改变访问权限,不应该改变程序的意义,故改变访问权限不能解除模棱两可状态)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值