知识卡片
值类别不等于类型
内容
左值与右值描述表达式的使用属性,不等于对象的类型。具名的右值引用形参作为表达式仍是左值;实参的类别与函数内形参表达式也不同。理解移动与转发时应分别记录对象类型、声明形式和表达式类别,避免只看两个 & 就决定操作。
参考来源
- 位置:《Effective Modern C++》第00章《简介与资源》(源文件:_epub-src/EPUB/text/ch001.xhtml)
- 结论依据:简介直接定义相关术语并区分表达式、对象与使用语境,本卡保留定义并解释其对回调或转发理解的价值。
- 原始内容:最遍布C++11各处的特性可能是移动语义了,移动语义的基础是区分右值和左值表达式。那是因为右值表明这个对象适合移动操作,而左值一般不适合。概念上(尽管不经常在实际上用),右值对应于从函数返回的临时对象,而左值对应于你可以引用的(can refer to)对象,或者通过名字,或者通过指针或左值引用。…