10302:识别表达式的副作用
题目
判断 a + b、i++、a = b + 1 和 f(a, b) 是否产生副作用。
解析
以下结论假设 a、b 和 i 都是普通的非 volatile 标量对象。读取 volatile 对象本身属于可观察行为,需要另行讨论。
解析
| 表达式 | 是否一定产生副作用 | 说明 |
|---|---|---|
a + b | 否 | 只读取两个对象并计算和,不修改对象。 |
i++ | 是 | 表达式的值是递增前的值,同时把 i 增加 1。 |
a = b + 1 | 是 | 把计算结果存入 a。 |
f(a, b) | 不一定 | 是否产生副作用取决于实参表达式和 f 的函数体。仅凭函数调用形式无法确定。 |
调用 f 前会完成实参的求值,但不同实参之间的求值次序通常未指定。因此即使函数体没有副作用,实参本身仍可能产生副作用。