为什么此代码不会产生模糊的呼叫错误
Why this code does not generate an ambigous call error?
我已经写了 mycomplex class> class and the plus( )运算符AS:
class MyComplex
{
public:
operator int() { return realPart; }
MyComplex(int r, int i=0)
{
realPart = r;
imaginaryPart = i;
}
int operator +(int i) { return imaginaryPart+i; }
private:
int realPart, imaginaryPart;
};
int main()
{
MyComplex c(5, 4);
cout << c+10 << "n"; // Why is this not ambiguous?
}
我认为可以将表达式 C 10 解释为尝试添加两个整数( c in c 10 将是使用转换运算符运算符int())将其降级到整数,或通过Overload Operator函数 int Operator (int I)作为Overload Operator呼叫。但是该程序没有任何错误编译,并产生了输出为14。如何?
当我们弄清楚 c+10
的含义时,我们进行了一个称为"超载分辨率"的过程,该过程首先通过名称查找找到所有可行的候选人。
在这种情况下,可行的候选人是:
MyComplex::operator+(MyComplex&, int); // via c.operator+(10)
::operator+(int, int); // via c.operator int() + 10
然后,我们查看哪个转换序列更好。对于第一个过载,无需转换-c
是MyComplex
的确切匹配,10
是int
的确切匹配。对于第二个过载,第二个参数是确切的匹配,但是第一个参数必须通过MyComplex::operator int()
进行用户定义的转换。
精确匹配的等级高于转换,因此首选第一个过载。
请注意,如果您的MyComplex::operator+()
取得了long
(例如),则呼叫将模棱两可。每个过载的转化序列都会更好。
相关文章:
- 呼叫运营商<<临时
- 方便地对C++中的所有字符串文字进行模糊处理
- 想要检测图像中的模糊,但无法正确
- 具有可分离内核的 2D 模糊卷积
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 如何组合许多连续的图像来模拟逼真的运动模糊?
- 呼叫 QSound,它们之间有延迟 Qt C++
- 什么是呼叫说明
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 多重继承导致虚假的模糊虚拟函数过载
- 为什么make_shared在不同的呼叫中分配相同的地址?
- 带boost的过载模糊性:可选,解决方法
- 错误:类型"std::__1::basic_string<char>"不提供呼叫运算符
- 设备IO控制呼叫崩溃
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用 gcc 的模糊函数过载分辨率.为什么?
- 使用纯 c++ 模糊图像
- 根据呼叫位置进行记忆
- 成员呼叫通过接线员<<
- 为什么此代码不会产生模糊的呼叫错误