C\C++_引用_函数参数

1. 左值和非左值概念

  • 左值概念:左值参数是可被引用的数据对象,例如:变量、数组元素、结构成员、引用和接触引用的指针
  • 非左值概念:包括字面常量(用引号括起的字符串除外,它们由其地址表示)和包含多项的表达式

2. 代码示例

#include <iostream>
using namespace std;

//!	当函数形参为非const引用时,接受引用参数的参数的意图是修改作为参数传递进来的变量,如果创建临时变量,
//!	则会阻止这种意图的实现,故C++编译器禁止创建临时变量
void Swap(int &a) {}

//!	当函数形参为const引用时,后面两种情况会创建临时变量:1. 实参的类型正确,但不是左值;2.实参的类型不正确,但可以转换为正确的类型。
void Print(const int &a){}

int main(void)
{
	int x = 10;
					
	//Swap(3);		//< 错误:传入的参数为非左值,则编译器会报错,禁止生成临时变量接收3
	//Swap(3+x);	//<	错误:3+x为非左值,而是一个表达式,禁止生成临时变量来接收3+x的值

	Print(3);		//<	正确:传入的参数为非左值,则会生成1个临时变量,让形参a的引用指向这个临时变量,函数使用完后,临时变量才销毁
	Print(3+x);		//<	正确:传入的为非左值,而是一个表达式,会生成临时变量来接收3+x的值,让形参a指向这个临时变量,函数使用完后临时变量才销毁

	system("pause");
	return 0;
}

3. 参考书籍

《C++ Primer Plus》第六版 —— 8.2.3 引用的属性和特别之处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值