编译器如何区分重载中的float和doubl参数

时间:2018-02-10 06:08:44

标签: c++

假设有2个功能

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

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

如果函数调用是:hello(5.0); 将调用哪个函数?

2 个答案:

答案 0 :(得分:3)

Float litterals以f后缀结尾,如5.0f中所示。 5.0是双倍的。

答案 1 :(得分:2)

这里没有含糊之处。 ISO C ++标准指定浮点文字,如果没有后缀f / Fl / L,在这种情况下它将被视为{{1}或float的类型为long double

编译器的任务是将double编译为hello(5.0)的调用。

引用n4296,第2.13.4 / 1节:

  

浮动文字的类型为hello(double),除非后缀明确指定。后缀doublef指定   F,后缀floatl指定L。如果缩放值不在可表示的范围内   对于它的类型的值,程序是不正确的。