c++中的左值与右值
(2015-01-02 13:03:38)
标签:
股票 |
分类: 汇编/C/CC |
++a是先自增,然后返回增加后的变量a,a是变量,本来就可以做左值,所以(a++)++正确;a++是后自增——在表达式里值还是原来的值——返回的是一个等于a+1的临时变量,临时变量是有const属性的,不可以更改,所以(a++)++错误。
左值和右值
左值(left value):出现在赋值表达式的左边的表达式,其作用为存放数据空间,且存放是允许的。缩写:lvalue
右值(right value):只能出现在赋值表达式的右边。缩写:rvalue
左值也可以作为右值表达式,变量可以是左值,也可以为右值,但常量只能是右值。
a=b //
b是变量,在这里是左值,也可以作为右值
a=8 // 8是常量,只能作为右值
(a=4)=28 //
C++语法规定:a=4为左值,28为右值
操作符的优先级与结合性
c = a + b
// OK
c = a + + b
// Error
c = a + + + b
// OK a ++ + b
c = a + + + + b
// Error a ++ ++ b
c = a + + + + + b // Error a ++
++ + b
操作符自左向右取尽可能多的符号组成运算符,有些操作符的结合性是自右向左的,操作符的其结合性以下表为准。
左值(left value):出现在赋值表达式的左边的表达式,其作用为存放数据空间,且存放是允许的。缩写:lvalue
右值(right value):只能出现在赋值表达式的右边。缩写:rvalue
左值也可以作为右值表达式,变量可以是左值,也可以为右值,但常量只能是右值。
a=b
a=8
(a=4)=28
操作符的优先级与结合性
c = a + b
c = a + + b
c = a + + + b
c = a + + + + b
c = a + + + + + b
操作符自左向右取尽可能多的符号组成运算符,有些操作符的结合性是自右向左的,操作符的其结合性以下表为准。
class Couter{
private:
int
number;
public:
Couter& operator++(int);
..............
};
对于前缀表达式:
Couter&
Couter::operator++()//返回引用
{
number++;
return *this;
}
这样没错,但它的功能为<对a自加后,之作用在a自身>,
要实现后缀式,这必须用
Couter
Couter::operator++(int)//后缀式,不返回引用
{
Couter temp;
temp=*this;
number++;
return temp;
}