Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
以下代码是否调用 UB ?
int main(){ volatile int i = 0; volatile int* p = &i; int j = ++i * *p; }
是的 - 可以首先评估 ++i 或 *p(即 i)。
是的,这是未定义的行为,因为您试图违反第二条规则..
该标准指出 1) 在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。 2)此外,只能访问先验值以确定要存储的值。
该标准指出
1) 在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。
2)此外,只能访问先验值以确定要存储的值。
注意*: operator的操作数的求值顺序是未指定的,*p只不过是i.
*
*p
i