前言
由于不同的文章和书籍,对左值和右值的区分皆有不同,这里我只是给自己定了一个逻辑可以自洽的标准,供自己去区分左值和右值,所以本篇博客,属于一个笔记。
C++ primer对左值和右值的介绍
C++中的表达式:要么是左值,要么是右值。而左值和右值是从C语言中继承过来的,在C语言中,为了帮助记忆,可以简单的认为左值可以位于赋值语句的左侧,右值则不能。这里其实也表达了一个隐藏的性质:左值可以被修改,右值不可以被修改。
但是在C++中,左值和右值的区分就复杂了很多,这也就是不同的文章、资料和书籍对左值和右值区分有不同的说法的原因。
C++primer:“一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象”
这句话的意思就是左值是一个指明对象的表达式,“常量对象不能做赋值语句的左侧运算对象”的意思就是const 左值,即使不可修改,但是依旧是左值。也就指出:左值分为可修改的左值和不可修改的左值(常量对象/const 左值)
C++primer:“虽然某些表达式的求值结果是对象