过载分辨率
Overloading resolution
本文关键字:分辨率 更新时间:2023-10-16
据我所知,当在两个候选函数之间进行选择时,编译器会更喜欢匹配最弱的函数。例如,如果我有:
void boo(int i, char c);
void boo(double d, int i);
对于以下代码:
float f = 1.0;
char c = 'c';
boo(f,c);
第二个CCD_ 1应该是优选的,因为它的最弱匹配是升级,而第一个是标准类型转换。
但当我尝试编译它(使用gcc)时,我得到了:
错误:ISO C++说这些是不明确的,尽管第一个的最差转换比第二个的最坏转换要好。
有什么想法吗?
您对过载解决方案的理解是错误的。将军规则(当有多个参数时)是选择至少有一个参数更好的函数不管好多少),其他人都不差。在里面换句话说,编译器分别处理每个自变量,为它创建一组"最佳匹配"。之后这些集合的并集:如果交集恰好包含一个函数,你赢了。否则,它是模棱两可的。
假设您调用了函数f。我认为过载解决过程是:1.创建一组候选函数。这组函数包括所有名为f的函数,这些函数可以从调用f()的位置访问。2.创建一组可行的函数。这组函数是候选函数的子集,每个可行函数的参数数量与用于调用f()的参数数量一致。3.选择最佳可行函数最佳可行函数是指其参数都具有比所有其他可行函数更好或相等的隐式转换序列的函数。如果多于或少于一个(不完全是一个),则会出现编译错误。下面的例子很好地展示了它:
class cat
{
public:
cat(int);
};
void func(int, int, int, cat)
{
std::cout << 1 << std::endl;
}
void func(int, int, double, double)
{
std::cout << 2 << std::endl;
}
int main()
{
func(1,2,3,4);
}
此代码生成编译错误(VS)或警告(g++)。
以下将正确运行(打印1):
void func(int, int, int, double)
{
std::cout << 1 << std::endl;
}
void func(int, double, double, double)
{
std::cout << 2 << std::endl;
}
int main()
{
func(1,2,3,4);
}
相关文章:
- 使用分辨率定理用Z3证明
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- Opencv 恢复到比我设置的更高的分辨率
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- C/C++ 位数组分辨率转换算法
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何在C++中为高分辨率时钟声明变量?
- 给定数字的浮点分辨率
- 过载分辨率和用户定义的转换
- QScreen geometry()api为分辨率2736 x 1824和2560 x 1600提供了错误的值
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 获取可能的屏幕分辨率列表
- std::array<const T, n> vs std::array<T, n> 过载分辨率
- 模板转换运算符的分辨率不明确
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 使用 gcc 的模糊函数过载分辨率.为什么?
- caffe 可以一次接收一批具有不同分辨率的输入吗?如果是这样,怎么办?
- 实现高分辨率计时器的最佳方法
- C++ 重载分辨率和恒常性
- 控制台分辨率程序不准确