C++左右值及引用

1 左值和右值

简单记法:能取地址的是左值,不能取地址的是右值
右值一般是常量
例:
i ++是右值,因为先把 i 赋值给临时变量,临时变量在+1,而临时变量是将亡值,&i++取地址会报错
++ i是左值,因为自身+1,本身是左值,&++i不会报错

这里需要注意的是,字符串常量是特例,字符串常量也是左值,可以取地址,而数字常量则是右值

左值引用

左值引用:常用于拷贝构造提高效率,因为减少了临时变量的拷贝过程
例:

虽然下边代码没什么实际意义
但第一句执行后,因为是引用,生命周期会延长
而第二句执行后,右值11应该被销毁
const int &t = 11
const int t = 11

右值引用

1、延长右值生命周期
例:

X make_x(){
	return X();
}
int main(){
	X &&x = make_x();
}

如果不是右值引用,因为函数返回值本身是右值,X()默认构造一次,然后return X()时再拷贝一份给返回值,返回值再拷贝给main中的变量,经过1次构造和2次拷贝构造
而如果直接使用右值引用,直接延长返回值的生命周期,提高性能,在大内存情况下,优化效果较为明显

你可能感兴趣的:(c++,算法,开发语言)