gpt4 book ai didi

C++ 重载歧义 : conversion versus promotion with primitive types

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:35 25 4
gpt4 key购买 nike

在这段代码中:

void f(float f, long int i) { cout << "1" << endl; }
void f(float f, float d) { cout << "2" << endl; }

int main() {

f(5.0f, 5);

}

有一个歧义。 Check it out! .但是,第二个参数是有符号整数。将 int 绑定(bind)到 long int 参数需要提升,但对于 float,则需要转换。

由于第一个参数是关于两个重载的完全匹配,所以它不算数。但是关于第二个参数,它在第一次过载(提升)上的排名优于在第二个(转化)上的排名。

为什么会出现解析歧义,而不是选择第一个重载?

最佳答案

intlong 是一个转换。 shortint 是一种提升。 (有关积分促销的完整列表,请参阅 [conv.prom]。)

同理,floatdouble是 float 提升。 doublelong double 是一个转换。

关于C++ 重载歧义 : conversion versus promotion with primitive types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com