区分左值右值的真正说法是:能否用“取地址&”运算符获得对象的内存地址。
临时对象是右值,可以被右值引用或者常量左值引用来引用;
持久对象是左值,可以被左值引用或常量左值引用来引用;
对于临时对象,它可以存储于寄存器中,所以是没办法用“取地址&”运算符;
对于常量,它可能被编码到机器指令的“立即数”中,所以是没办法用“取地址&”运算符;
字符串字面值常量是C++标准中明确指明的特例,为常量左值,所以可以取地址&运算,其地址属于进程的只读内存空间。其它的字面值常量都是“纯右值”。
也就是说:
&5 ; //非法. 5为常量右值
&("hello") ; // 合法,"hello" 为常量左值
本文详细解析了C++中的左值与右值概念,包括如何通过取地址运算符来区分两者,并介绍了不同类型的对象(如临时对象、持久对象、字符串字面量常量等)作为左值或右值的特性及其使用限制。
3408

被折叠的 条评论
为什么被折叠?



