如何显示以下有效和无效以及它们的含义.何时会出现这样的情况来编写这段代码.
++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的旧值
这些都会x在序列点之间修改多次的值,因此是未定义的行为,您应该小心避免.我不知道"合法"和"非法"之间的区别在哪里 - 因为行为是合法的,任何行为(包括向国务卿发送各种电子邮件)都完全符合标准.
假设问题是关于内置函数++和--运算符,这些语句都不是严格合法的.
前两个是格式良好的,即它们只是可编译的,因为前缀增量的结果是左值.最后两个是格式错误的,因为后缀增量的结果不是右值,这就是你无法分配它的原因.
然而,即使前两个在某种意义上也不合法,它们会产生不确定的行为.在没有插入序列点的情况下多次修改同一对象是非法的.(另请注意,允许编译器拒绝编译产生未定义行为的格式良好的代码,这意味着即使第一对代码也可能被证明是不可编译的).
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |