gpt4 book ai didi

c++ - 重载函数with (unsigned chars,传char,保证不编译?

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

以下代码无法在我的编译器上编译。我明白为什么。

void f(signed char x);
void f(unsigned char x);

int main()
{
char c = 0;
f(c);
}

signed charunsigned charchar 是三种不同的类型,这会导致重载时出现歧义。

我的问题是,这是否总是保证是模棱两可的,因此是一个编译错误?是否有一些规则可以选择性地允许编译器接受此代码?是否有一些奇怪但合法的整数大小组合会导致此代码编译?

最佳答案

比你的例子更糟糕的是,所有整数转换都被平等对待。对于作为整数参数的整数表达式的函数参数,类型要么完全匹配,要么不匹配。

void f( short ) {}
void f( long ) {}

int main() {
f( 1000000 ); // Ambiguous, even though one alternative loses numeracy.
}

[over.ics.rank] 规则中没有考虑整数转换等级来寻找最佳参数-参数匹配。即使有,三个 char 类型也需要具有相同的等级。


比我的示例更糟糕的是,即使参数根本无法初始化两个备选方案之一,调用也可能是模棱两可的。

void f( short ) {}
void f( long ) {}

int main() {
f({ 1000000 }); // Ambiguous, even though narrowing to short is prohibited.
}

这似乎不是标准的规范要求,我正在考虑提交缺陷报告。 (§13.3.3.1.5/9.1 含糊不清。)

关于c++ - 重载函数with (unsigned chars,传char,保证不编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217538/

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