增量和减量运算符

ckv*_*ckv 6 c++

如何显示以下有效和无效以及它们的含义.何时会出现这样的情况来编写这段代码.

++x = 5;     // legal
--x = 5;     // legal
x++ = 5;     // illegal
x-- = 5;     // illegal
Run Code Online (Sandbox Code Playgroud)

Uri*_*Uri 13

后缀(x ++/x--)运算符不返回左值(可以赋值的值).

它们返回一个临时值,该值是更改前变量值的副本

该值是右值,因此您可以写:

y = x++ 并获得x的旧值

  • @Bruno:为什么不呢?这是后增量算子的全部观点. (2认同)

小智 9

鉴于operator =()和operator ++()都可以重载,如果不了解运算符所应用的类型,就不可能说出代码的作用.


Dav*_*ley 7

这些都会x在序列点之间修改多次的值,因此是未定义的行为,您应该小心避免.我不知道"合法"和"非法"之间的区别在哪里 - 因为行为是合法的,任何行为(包括向国务卿发送各种电子邮件)都完全符合标准.


AnT*_*AnT 5

假设问题是关于内置函数++--运算符,这些语句都不是严格合法的.

前两个是格式良好的,即它们只是可编译的,因为前缀增量的结果是左值.最后两个是格式错误的,因为后缀增量的结果不是右值,这就是你无法分配它的原因.

然而,即使前两个在某种意义上也不合法,它们会产生不确定的行为.在没有插入序列点的情况下多次修改同一对象是非法的.(另请注意,允许编译器拒绝编译产生未定义行为的格式良好的代码,这意味着即使第一对代码也可能被证明是不可编译的).