【C++之函数】引用符号&、内联函数inline、函数重载

引用(&)是标识符的别名

声明一个引用指向一个对象,则只是为对象的别名,其本身同所指对象保持一致。
例如:引用ri指向变量i,则对ri赋值就等同于向变量i赋值

int main() {
	int j,i;
	int& ri = i;//建立一个int型的引用ri,初始化为变量i的别名
	j = 1;
	ri = j;//等同于i=j
	printf("j = %d\ni = %d\nri = %d\n", j, i, ri);
}
/*输出:
j = 1
i = 1
ri = 1
*/

对于函数参数来说可以用引用作为形参,这样会更程序更高效,其中需要注意的是,引用作为形参,则被引用的对象在函数体内的修改将会影响到本身。

void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}
int main() {
	int a, b;
	a = 1, b = 2;
	printf("a的初始值:%d\nb的初始值:%d\n", a, b);
	swap(a, b);
	printf("a与b交换后:\na值:%d\nb值:%d", a, b);
}
/*输出:
a的初始值:1
b的初始值:2
a与b交换后:
a值:2
b值:1
*/

如上程序中输出的结果所示,通过引用的形参成功交换了变量a与b的值;倘若不想传入的变量被函数修改,则可以将引用转为常引用(关键字 const),将上面程序中的swap函数做如下修改(会报错):

void swap(const int &a, const int &b) {
	int temp = a;
	a = b;
	b = temp;
}

上面代码报错为错误(活动) E0137 表达式必须是可修改的左值因为函数体尝试对常引用变量进行修改,而常引用是不允许改变其所指对象的值,因此可以很好地保护传入的数据不被修改

内联函数(关键字:inline)

对于内联函数来说,程序编译时在其调用处会用内联函数的函数体进行替换,这样可以节省参数传递、控制转移等开销,适用于简单的函数体。
但是需要注意(若想编译器将其作为内联函数对待):
1、内联函数体内不能有循环语句和switch语句;
2、内联函数的声明必须出现在内联函数第一次被调用之前;
3、对内联函数不能进行异常接口声明
使用:
在函数定义的时候,在函数返回类型前加inline即可,例如:

inline void ToInline() {//内联函数定义
	printf("调用内联函数\n");
}
int main() {
	ToInline();
}
函数重载

函数重载的意思是:允许功能相近的函数在相同的作用域以相同函数名声明,即可以定义多个同名的函数,只要保证其函数的参数类型不同或参数个数不同;
其中注意:编译器不以形参名,返回值不同来区分重载函数。
举例如下,两个重载函数,一个负责浮点数相加,一个负责整型数相加,编译器会根据传入的参数类型来调用相应的重载函数

float Add(float a, float b) {
	printf("调用浮点数相加函数\n");
	return a + b;
}
int Add(int a, int b) {
	printf("调用整型数相加函数\n");
	return a + b;
}
int main() {
	float a = 1.1;
	float b = 2.1;
	printf("%.1f + %.1f = %.1f\n", a, b, Add(a, b));
	int c = 1;
	int d = 1;
	printf("%d + %d = %d", c, d, Add(c, d));
}
/*输出:
调用浮点数相加函数
1.1 + 2.1 = 3.2
调用整型数相加函数
1 + 1 = 2
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值