C++中的函数重载。不适用于 float,适用于 double [重复]
Posted
技术标签:
【中文标题】C++中的函数重载。不适用于 float,适用于 double [重复]【英文标题】:Function overloading in C++. Does not work with float, works with double [duplicate] 【发布时间】:2015-06-17 08:35:24 【问题描述】:#include <iostream>
using namespace std;
int square(int x);
float square(float x);
int main()
cout<<square(3);
cout<<square(3.14);
return 0;
int square(int x)
cout<<"\nINT version called\n";
return x*x;
float square(float x)
cout<<"\nFLOAT version called\n";
return x*x;
我试图用双一替换函数的浮点版本,然后它开始工作。这里有什么问题? 3.14不能算float吗?
错误:重载 'square(double)' 的调用不明确 注意:候选人是: 注意: int square(int) 注意:float square(float)
【问题讨论】:
转换为(float)
或在您的文字 (3.14f
) 中使用 f
如果您愿意。我建议使用double
,因为它具有更高的精度,并且它是here 中提到的默认浮点数。
【参考方案1】:
C++ 中的浮点字面量是double
类型。从double
到int
和float
的转换没有定义顺序,因此您的调用不明确。
如果要调用 float
函数,请使用 float
字面量调用它:
cout<<square(3.14f);
//note the f here^
【讨论】:
【参考方案2】:3.14 被编译器视为双精度数。它没有找到带有双参数的函数,并且如果它应该将双精度转换为 int 或浮点数感到困惑。因此请尝试下面的代码或在函数声明中使用双精度。
cout<<square(3.14f);
【讨论】:
以上是关于C++中的函数重载。不适用于 float,适用于 double [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Return 不适用于 float 或 int,但适用于 string?
为啥空声明适用于带有 int 参数的定义,但不适用于 float 参数?
SWIG 多参数类型映射适用于函数,但如果有多个构造函数,则不适用于构造函数