该标准规定;
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,只能访问先验值以确定要存储的值。
在示例中
i = i++;
a[i] = i++;
从声明的第一句话可以清楚地看出,这些示例是导致未定义行为的结果。
在解释该声明的第二句话时,据说;
第二句话说:如果在一个完整的表达式中写入一个对象,那么在同一个表达式中对它的任何和所有访问都必须直接参与到要写入的值的计算中。该规则有效地将合法表达限制为那些访问明显先于修改的表达。例如,旧的备用
i = i + 1
是允许的,因为 i 的访问用于确定 i 的最终值。这个例子
a[i] = i++
是不允许的,因为 i 的访问之一(a[i] 中的那个)与最终存储在 i 中的值无关(这在 i++ 中发生),因此没有好的方法来定义。
我的问题是;
1.这是什么意思,如果在一个完整的表达式中写入一个对象,那么在同一个表达式中对它的任何和所有访问都必须直接参与到要写入的值的计算中。?
2.这是什么意思,该示例a[i] = i++
是不允许的,因为 i 的访问之一(a[i] 中的那个)与最终存储在 i 中的值无关(这在 i++ 中发生)
可以有人以某种简单的方式解释它吗?