编译器如何在超载中区分浮动和双重参数

How does compiler differentiate between float and doubl arguments in overloaded

本文关键字:参数 超载 中区 编译器      更新时间:2023-10-16

假设有2个函数

void hello(float x)
{ cout<<x*x;}
void hello (double x)
{cout<<x*x;}

以及函数调用是:hello(5.0(;哪个函数将被称为?

double。

float ditterals以 f后缀结尾,如 5.0f中。5.0是双重的。

这里没有歧义。ISO C 标准指定的是浮点文字,如果不用f/Fl/L浮动,则将分别将其视为floatlong doubledouble 。。P>

在您的情况下,授权编译器将hello(5.0)编译为hello(double)的呼叫。

引用N4296,第2.13.4/1节:

除非后缀明确指定,否则浮动文字的类型为 double。后缀fF指定 float,后缀lL指定long double。如果缩放值不在代表的范围内 该类型的值,该程序是不形成的。