与在C 中覆盖的人混淆了
got confused with overriding in C++
所以我在面试中面对这个问题,对超负荷规则感到非常困惑,您能指出我在编译时的阐述。
超载功能:
int mult(int a, int b)
{
cout<<"int "; return a*b;
}
long mult(long a, long b)
{
cout<<"long "; return a*b;
}
float mult(float a, float b)
{
cout<<"float "; return a*b;
}
然后呼叫:
long m = mult(5.2,7);
cout<<"result "<<m<<endl;
float f = mult(5,7.2);
cout<<"result "<<f<<endl;
功能之间选择的规则是什么?
您在https://en.cppreference.com/w/cpp/language/overload_resolution
上有很好的描述。这里发生的事情是,根据最少的转换量选择了多数。
long m = mult(5.2,7);
long m
完全无关。此调用是mult(double, int)
,因此为了找到适合此功能的最佳拟合,规则说的是使用最少的转换量找到该功能。(请参阅最佳可行函数(。
这只需mult(int, int)
即可进行一次转换。所有其他功能都需要两个隐式转换才能匹配。
第二个呼叫也是相同的参数。
这些规则很容易使呼叫模棱两可,例如
如果您添加
float mult(int a, float b);
进入混音,您的程序不会编译。呼叫
float f = mult(5, 7.2);
也是一个隐式转换,与 mult(int, int)
函数相同。
相关文章:
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- 在终端中运行可执行文件与在Mac查找器中打开
- 传入与在C++中分配常量引用
- 在 Xubuntu 19.04 中编译 c++ 是否应该与在 Ubuntu 18.04 中编译 c++ 不同
- Clang:覆盖之前在命令行上指定的所有警告和错误警告标志
- 在glTexImage2D中,当我选择与在着色器中采样不同的内部格式时,情况如何?
- 存储在 std::map/std::set 中,与在存储所有数据后对向量进行排序
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 在 C++ 中获取同一公式的值与在 C# 中获取的值不同
- 与在C 中覆盖的人混淆了
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 与在C 中使用QSORT相比,我该如何将一百万个数字分组
- 获取与在模板参数中传递的函数成员类型相同的类
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 使用();与;在 C++ 中创建对象时
- 在矢量的尖括号内使用指针符号与在外部使用指针符号有什么区别
- 与在C 中返回向量的行为不一致
- OpenSSL-通过代码生成的数字签名与在命令行生成的签名不匹配
- 在 MSVC 中将某些库的目标平台版本设置为 10.x 是否使程序与在 Windows Vista/7/8 上运行不兼容
- 为什么我得到 C2883:函数声明与 - 在仅覆盖基类中的一个重载时通过使用 - delcaration 引入