你能告诉我为什么下面的代码给我以下错误 -重载“C(int)”的调用不明确
我认为由于 C(char x) 是私有的,因此只有 C(float) ctor 从外部可见,并且应该通过将 int 转换为 float 来调用它。
但事实并非如此。
class C
{
C(char x)
{
}
public:
C(float t)
{
}
};
int main()
{
C p(0);
}
Scott Meyer 在《Effective C++》中对此进行了讨论。这是不明确的原因是他们希望确保仅仅改变成员的可见性不会改变其他地方已经存在的代码的含义。
否则,假设您的 C 类位于标头中的某个位置。如果您有一个私有 C(int) 成员,则您提供的代码将调用 C(float)。如果由于某种原因,C(int) 成员被公开,旧代码会突然调用该成员,即使 C(int) 成员都不是公开的。旧代码,而不是它调用的函数发生了变化.
编辑:更多原因:
更糟糕的是,假设您有以下两个函数:
C A::foo()
{
return C(1.0);
}
C B::bar()
{
return C(1.0);
}
这两个函数可以调用不同的函数,具体取决于 foo 或 bar 是否被声明为 C 的友元,或者 A 或 B 是否继承自 C。拥有完全相同的代码调用不同的函数是可怕的。
(这可能不如斯科特·迈耶的讨论那么好,但这就是想法。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)