当我今天阅读 C 标准时,它说的是副作用
访问 volatile 对象、修改对象、修改文件或调用执行任何这些操作的函数都是副作用
和 C++ 标准说
访问由 volatile glvalue (3.10) 指定的对象、修改对象、调用库 I/O 函数或调用执行任何这些操作的函数都是副作用
因此,因为两者都禁止在同一个标量对象上发生未排序的副作用,所以 C 允许以下情况,但 C++ 使其成为未定义的行为
int a = 0;
volatile int *pa = &a;
int b = *pa + *pa;
我是否正确阅读规范?如果是这样,差异的原因是什么?