CC+=

CC+=,第1张

CC+= 左值和非左值概念
  • 左值概念:左值参数是可被引用的数据对象,例如:变量、数组元素、结构成员、引用和接触引用的指针
  • 非左值概念:包括字面常量(用引号括起的字符串除外,它们由其地址表示)和包含多项的表达式
代码示例
#include 
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;
}
参考书籍

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4950068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存