超载是模棱两可的 我正在做一些C++面试问题(为了好玩)。我发现:
根据C++11标准,这个程序的输出是什么超载是模棱两可的 我正在做一些C++面试问题(为了好玩)。我发现:,c++,c++11,C++,C++11,根据C++11标准,这个程序的输出是什么 #include <iostream> void f(int){std::cout << 1;} void f(unsigned){std::cout << 2;} int main() { f(-2.5); } #包括 void f(int){std::cout很好。您正在尝试使用浮点数调用函数。。。 尝试使用整数值。。。 如果使用f(-2)而不是f(-2.5),则该程序将正常工作,但正如所指出的,“除非添
#include <iostream>
void f(int){std::cout << 1;}
void f(unsigned){std::cout << 2;}
int main()
{
f(-2.5);
}
#包括
void f(int){std::cout很好。您正在尝试使用浮点数调用函数。。。
尝试使用整数值。。。
如果使用f(-2)
而不是f(-2.5)
,则该程序将正常工作,但正如所指出的,“除非添加额外的限定符,否则整数文本始终是int
”。
他的意思是,即使使用f(-2),也会得到与f(2)相同的结果…这显然使重载无效。-2.5
是一个双精度,而不是有符号的int
。编译器可以进行任何一种转换。为什么它会选择其中一种呢?-2.5
是双精度类型。到int
或无符号的的转换都是同样有效的语言规则下的id(即编译器没有理由选择其中一个而不是另一个)。因此,选择要调用的函数会产生歧义。@Peter对于重载解析排序,转换的排序是相等的。在其他规则下,将-2.5
转换为无符号
无效(浮点到整数的规则)但在重载解析阶段没有考虑到这一点。@IgorTandetnik当然!我很惭愧…奇怪,f(2)
将产生相同的输出。除非您添加额外的限定符,否则整数文本始终为int
。@MSalters它并不含糊。答案经过编辑,用于建议f(-2)
起作用了,我要指出的是,使用正整数或负整数并不重要。一旦删除,我的评论就断章取义了。