假设有2个功能
void hello(float x)
{ cout<<x*x;}
void hello (double x)
{cout<<x*x;}
如果函数调用是:hello(5.0); 将调用哪个函数?
答案 0 :(得分:3)
双
Float litterals以f
后缀结尾,如5.0f
中所示。 5.0
是双倍的。
答案 1 :(得分:2)
这里没有含糊之处。 ISO C ++标准指定浮点文字,如果没有后缀f
/ F
或l
/ L
,在这种情况下它将被视为{{1}或float
,的类型为long double
。
编译器的任务是将double
编译为hello(5.0)
的调用。
引用n4296,第2.13.4 / 1节:
浮动文字的类型为
hello(double)
,除非后缀明确指定。后缀double
和f
指定F
,后缀float
和l
指定L
。如果缩放值不在可表示的范围内 对于它的类型的值,程序是不正确的。