C ++中的函数重载。不适用于float,适用于double

时间:2015-06-17 08:35:24

标签: c++ overloading

#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;
}

我试图用double替换函数的float版本,然后它开始工作。这里有什么问题? 3.14不能被视为浮动吗?

  

错误:调用过载&#39; square(double)&#39;含糊不清的   注:候选人是:
  注意:int square(int)
  注意:float square(float)

2 个答案:

答案 0 :(得分:8)

C ++中的浮点文字属于double类型。从doubleintfloat的转化没有定义排序,因此您的调用不明确。

如果您想调用float函数,请使用float字面值调用它:

cout<<square(3.14f);
//note the f here^

答案 1 :(得分:0)

3.14被编译器视为double。它没有找到带有double参数的函数,如果它应该将double转换为int或float,则会感到困惑。因此,请尝试使用下面的代码或在函数声明中使用double。

 cout<<square(3.14f);