C++ 左值和右值,左值引用和右值引用

来源:互联网 发布:十大神优化游戏 编辑:程序博客网 时间:2024/05/29 14:54

区分左值右值的真正说法是:能否用“取地址&”运算符获得对象的内存地址。

临时对象是右值,可以被右值引用或者常量左值引用来引用;

持久对象是左值,可以被左值引用或常量左值引用来引用;

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

字符串字面值常量是C++标准中明确指明的特例,为常量左值,所以可以取地址&运算,其地址属于进程的只读内存空间。其它的字面值常量都是“纯右值”。

也就是说:

&5 ; //非法. 5为常量右值

&("hello") ; // 合法,"hello" 为常量左值


原创粉丝点击