���Ľ�������л�����Ķ�
C++中的函数声明比C有更多的功能。为了更清楚描述清楚影响的不同,我们先来看看C和C++中函数最主要的差异是什么。 很多C库包含至少一组的命名非常接近的函数。每个函数除了参数或返回值不同,功能在本质上是相同的。 标准C库也包含若干这样的组。例如,有一组“abs”函数专门用来计算一个数值的绝对值。组里包含:1
2
3
4
5
6
7
8 int abs(int i);
long int labs(long int li);
float fabsf(float f);
double fabs(double d);
long double fabsl(long double ld);
```
函数fabsf和fabsl不属于早期C标准,却存在于修订后的C9X标准中。 标准C库还有一个“put”函数组:
int fputc(int c, FILE *f);
int fputs(char const *s, FILE *f);
int putchar(int c);
int puts(char const *s);
1 |
|
int put(int c); // putchar
int put(int c, FILE *f); // fputc
int put(char const *s); // puts
int put(char const *s, FILE *f); // fputs
1 | ### 函数的重载的规则 |
int put(int c);
int put(int c, FILE *f);
1 |
|
char c; ... put(c);
1 |
|
int put(int c);
1 |
|
void f(int i);
void f(long int li);
void f(char *p);
void f(double d, int i);
1 |
|
void f(char *p);
1 |
|
void f(long int li);
1 |
|
void f(int i);
1 |
|
void f(int i);
1 | 没有被声明。这种情况下,重载决策必须在下面二者中选一个: |
void f(long int li);
void f(char *p);
`
但它们两个不分仲伯,都需要进行类型转换。当重载决策没有办法选出一个最优匹配,那么调用就是不明确的,这会产生一个编译错误。函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。 这就是函数名重载的基本知识。