在使用pow函数时了解什么是函数重载概念

时间:2014-02-07 14:31:38

标签: c function overloading pow

我最近在编程世界和C语言中被介绍过。

当我尝试时,我遇到了理解以下概念的麻烦 利用math.h库中的pow函数,以便在我的代码中进行一些计算。

当我作为参数传递给pow函数时,两个变量x和i都声明为整数,我从IDE(Visual Studio 2012)中得到一个错误说明

:“多个重载函数实例”pow“匹配参数列表”:

Function “pow(double _X, int _Y)”
Function “pow(float _X , int _Y)”
Function “pow(float _X , int _Y)”
Function “pow(long double _X, int _Y)”

Argument types are ( int, int ).

我知道pow函数会返回一个double值但是会发生什么,比如当你需要只使用整数时?为什么不能将函数的返回值作为double存储到声明的变量中,并且有两个整数作为参数?

搜索维基百科,当我在 Stack Overflow 中找不到任何相关内容时,唯一给定的函数重载定义如下:

函数重载或方法重载是各种编程语言(如Ada,C ++,C#,D和Java)中的一项功能,它允许创建多个具有相同名称的方法,这些方法各自不同其他类型的输入和函数的输出。它被简单地定义为一个函数执行不同任务的能力。 “

什么是函数重载以及它如何影响我尝试实现的这个特定函数的行为?

如果问题太琐碎或无法回答,或者我错过了一个明显的难题,那么提前抱歉。

3 个答案:

答案 0 :(得分:2)

您使用的是C ++编译器,(经典)C中没有函数重载。

在那里,我们对这些案例有不同的功能(见the manual page here):

  • double pow(double x, double y);
  • float powf(float x, float y);
  • long double powl(long double x, long double y);

因此,从函数名称中总是清楚所涉及的类型是什么。

从C的C99版本开始,您可以使用泛型来实现它,并且已经在<tgmath.h>标题中完成了。此标头为您提供了一个使用重载的函数pow()

但是从错误输出可以清楚地看出,你没有这样的C编译器。

答案 1 :(得分:1)

C中没有函数重载。
C中唯一的重载是编译器中的运算符重载(int + intfloat + float,&amp; as adress-of,&amp; as bitwise-and,* as as pointer-to,* as multipy ... )。

答案 2 :(得分:0)

您无法重载功能。但是如果你使用double,int,short,long,float你可以做一个函数并传递一个casted参数。

double  pow(double, double);

int a;
int b;

int c = (int)pow((double)a, (double)b);

你必须采取最大的类型。这是编译器的一个简单技巧。