c++ - 重载分辨率

标签 c++

据我所知,在两个候选函数之间进行选择时,编译器会更喜欢匹配最弱的函数。 例如,如果我有:

void boo(int i, char c);  
void boo(double d, int i);

对于以下代码:

float f = 1.0;  
char c = 'c';
boo(f,c);

第二个 boo 应该是首选,因为它最弱的匹配是提升,而第一个是标准类型转换。

但是当我尝试编译它(使用 gcc)时,我得到:

error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second.

有什么想法吗?

最佳答案

你对重载决议的理解是错误的。一般 规则(当有多个参数时)是选择 一个至少有一个参数更好的函数(它没有 不管好多少),其他的都没有更糟。在 换句话说,编译器分别处理每个参数, 为它创建一组“最佳匹配”。在此之后,需要 这些集合的并集:如果交集恰好包含一个 函数,你赢了。否则,它是不明确的。

关于c++ - 重载分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152207/

相关文章:

c++ - 如何从正在评估的一行代码中找到字符的特定位置

c++ - 这个合并排序代码有什么问题?

c++ - 读取表达式

c++ - 我如何在多个 GPU 上同时执行 cufftXt 和 CUDA 内核?

c++将数据存储在对齐数组的中间

c++ - 迭代无符号整数的所有值的最漂亮方法

c++ - Typedef——为什么这个 C++ 代码有效?

c++ pragma #error 报错

c++ - 使用 std::map 时这些做法是否合适?

c++ - const int*& var 是什么意思?