1、函数重载分析(下)
1、重载与指针
1、下面函数指针保存哪一个函数的地址?
int fun(int x)
{
return x;
}
int fun(int a, int b)
{
return a + b;
}
int fun(const char *s)
{
return strlen(s);
}
//
int c;
typedef (int)(*PFUN)(int a);
PFUN p= fun;
c = p(1);//调用哪一个 fun
2、函数重载遇上函数指针。将函数重载函数名赋值给函数指针时:
1、根据重载规则挑选和函数指针参数列表一致的候选者。
2、严格匹配候选者的函数类型和函数指针类型。
3、注意:
1、函数重载必须发生在同一个作用域内。
2、编译器需要用参数列表和函数类型进行函数选择。
3、无法通过函数名得到重载函数的函数入口。
2、如何保证一段C代码只会以C语言的方式编译?
代码:
#ifndef __cplusplus
extern "C"
{
#endif
//按照C编译的代码
#ifndef __cplusplus
}
#endif
注意事项:
1、C++编译器不能以C的方式编译重载函数。
2、编译方式决定了函数名被编译后的目标名。
3、C++编译方式将函数名和参数列表编译成目标名。
4、C编译方式只将函数名编译成目标名。
小结:
1、函数重载时C++对C的一个重要升级。
2、函数重载通过参数列表区分不同的相同函数。
3、extern 能够实现C和C++之间的相互调用。
4、编译方式决定了符合表中的函数名的最终目标名。
5、extern "C"{}中的代码块不能包含函数重载。