函数重载

"本文介绍了C++中的函数重载原理,包括重载的条件、示例及作用域影响。同时,讨论了const和volatile对形参类型的影响,以及如何在C++和C语言之间进行函数调用。还提到了在C++中调用C函数的 extern "C" 使用方法,确保链接时不发生错误。"
摘要由CSDN通过智能技术生成

定义:

1.一组函数,其中函数名相同,参数列表的类型和个数不同,这一组函数称为函数重载。

Q:为什么C语言代码不支持函数重载?

A:C++代码产生的函数符号是由函数名+参数列表类型构成的,C代码产生的符号只有函数名。

2.一组函数想要构成重载必然要处在同一作用域当中

bool compare(int a,int b){//compare_int_int
	return a>b;
}
bool compare(double a,double b){//compare_double_double
	return a>b;
}
bool compare(const char* a,const char* b){//compare_const char*_const char*
	return a>b;
}

int main(){
	bool compare(int a,int b);
	cout<<compare(10,10)<<endl;
	cout<<compare(10.0,10.0)<<endl;//精度丢失
	cout<<compare('the','world')<<endl;//报错
	//函数在当前局部作用域声明后,后面都会去调用声明了的函数,而不会去调用全局中的重载函数
}

3.const或volatile时对形参类型的影响

void func(int a);
void func(const int a);
//无法构成重载,对于编译器来说,参数类型都是int

void func(int *a);
void func(const int *a);
//运行通过,构成重载

void func(int *a);
void func(int *const a);
//运行不通过

4.一组函数函数名和参数列表都相同,仅仅返回值不同,不能构成重载。生成符号和返回值没有任何关系

5.C++调用C语言函数时链接会报错,因为C文件中函数符号只生成函数名,C++生成带参数列表的,找不到无法链接,除非在C++代码的函数声明处:

extern "C"{
	int sum(int a,int b);//符号:sum "UND"
}

C代码调用C++函数时同样链接会报错,除非在C++代码的函数定义处:

extern "C"{
	int sum(int a,int b){//sum .text
		return a+b;
	}
}

一般需要让函数以C语言方法运行但不确定代码是C++还是C语言时,不能直接用*extern “c”*因为C语言编译器不认识,一般:

#ifdef _cplusplus
extern "C"{
#endif
	int sum(int a,int b){
		return a+b;
	}
#ifdef _cplusplus
}
#endif

如此一来,C语言有函数部分有效,而C++会将函数按C方法编译

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值