Pol*_*000 49 c evaluation increment language-lawyer
int i = 3;
int j = (i)++;
Run Code Online (Sandbox Code Playgroud)
VS
int i = 3;
int j = i ++;
Run Code Online (Sandbox Code Playgroud)
虽然上面两个例子都存储了3个__CODE__,但上述两个案例的评估方式是否存在差异?
既然__CODE__是a __CODE__,那么__CODE__第一种情况是否会被评估为表达式,这相当于递增rvalue?或者它是未定义的行为,只是恰好存储3 __CODE__?
或者我是否过度思考它只是一个简单的后缀?
Eri*_*hil 92
i++并且(i)++行为相同.C 2018 6.5.1 5说:
带括号的表达式是主表达式.它的类型和值与未表示的表达式相同.如果未表示的表达式分别是左值,函数指示符或空表达式,则它是左值,函数指示符或void表达式.
C 1999中的措辞相同.
Gov*_*mar 52
在您简单的例子i++对比(i)++,没有任何区别,如埃里克Postpischil的回答说.
但是,如果您*使用运算符取消引用指针变量并使用increment运算符,则这种差异实际上是有意义的; *p++和之间有区别(*p)++.
前一个语句取消引用指针,然后递增指针本身; 后一个语句取消引用指针然后增加解除引用的值.
| 归档时间: |
|
| 查看次数: |
6222 次 |
| 最近记录: |