Effective_C++:26、防卫潜伏的ambiguity(模棱两可)状态
程序员文章站
2022-03-08 15:58:11
...
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.多继承中,模棱两可状态更易存在。即派生类继承了两个基类相同名称的成员。不管成员的访问权限是哪种,只要有相同名称,便存在这个问题(因为改变访问权限,不应该改变程序的意义,故改变访问权限不能解除模棱两可状态)。