左值和右值

117 阅读1分钟

引用

引用说明为对象建立引用名,即别名
引用在定义初始化时与对象名绑定,程序中不能对引用重定义
一个对象的别名,从使用方式和效果上,与使用对象名一致

区分左值和右值

能否用“取地址&”运算符获得对象的内存地址
对于临时对象,它可以存储于寄存器中,没办法用“取地址&”运算符
对于常量,它可能被编码到机器指令的“立即数”中,没办法用“取地址&”运算符

std::string strHello = "Hello World!"
Foo(strHello.substr(0, 5)); //右值引用, substr()返回作为Foo参数是临时变量,执行结束后就不再存在.
Bar(strHello); //左值引用, strHello在执行结束后依然存在