Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器如何区分重载中的float和doubl参数_C++ - Fatal编程技术网

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

C++ 编译器如何区分重载中的float和doubl参数,c++,C++,假设有两个函数 void hello(float x) { cout<<x*x;} void hello (double x) {cout<<x*x;} void hello(float x) {coutDouble 浮点数以f后缀结尾,如5.0f5.0是双精度。double 浮式文件结尾用 f>代码>后缀,如 5.0f < /代码>。 5 > < p> >这里没有歧义。ISOC++标准指定浮点文字,如果不加上 f>代码> / f>代码>或 L>代码> / L/C++

假设有两个函数

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

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

浮点数以
f
后缀结尾,如
5.0f
5.0
是双精度。

double


<>浮式文件结尾用<代码> f>代码>后缀,如<代码> 5.0f < /代码>。<代码> 5 > < p> >这里没有歧义。ISOC++标准指定浮点文字,如果不加上<代码> f>代码> /<代码> f>代码>或<代码> L>代码> /<代码> L/C++ >,在这种情况下,它将被视为<代码>浮点<代码>或long double
分别属于
double
类型

在您的情况下,编译器必须将
hello(5.0)
编译为
hello(double)
调用

引用n4296第2.13.4/1节:

除非由后缀明确指定,否则浮点文本的类型为
double
。后缀
f
f
指定
float
,后缀
l
l
指定
long double
。如果缩放值不在可表示的范围内 对于其类型,程序的格式不正确


“ISO+C++标准规定了浮点文字,如果不加上<代码> F>代码> >代码> F 或<代码> L>代码> >代码> L >代码>,在这种情况下,它将被处理为<代码>浮点< /代码>或 long double < /代码>,<强>是类型<代码>双<强> > < /P> 在您的情况下,编译器必须将
hello(5.0)
编译为
hello(double)
调用

引用n4296第2.13.4/1节:

除非由后缀明确指定,否则浮点文本的类型为
double
。后缀
f
f
指定
float
,后缀
l
l
指定
long double
。如果缩放值不在可表示的范围内 对于其类型,程序的格式不正确


你认为代码>在C++中意味着什么?对我来说,这意味着你的代码将不会编译。@ SyrdReNuja,对不起,我的意思是x*x:它可能取决于编译器对默认浮点类型的选择为常数,你也可以使用5.0f5.0L来指定你的常量的类型。@ HaoChanWu编译器没有选择,5是“代码>双< /代码> @约翰。你是对的,我忘记了多态性是C++的东西。在思考一些遗留的C编译器。你认为C++中的代码< x > <代码>是什么意思?对我来说,这意味着你的代码将不会编译。@ SyrdReNuja,对不起,我的意思是x*x:它可能取决于编译器对默认浮点类型的选择为常数,也可以使用5.0f5.0L来指定。你的常量的类型。@好陈武编译器没有选择,5是一个代码>双< /Cord> @ john You是正确的,我忘记了多态是C++的东西。