私が今日C標準を読んだとき、それは副作用について述べています
揮発性オブジェクトへのアクセス、オブジェクトの変更、ファイルの変更、またはこれらの操作のいずれかを行う関数の呼び出しはすべて副作用です
そしてC++標準は言う
volatile glvalue (3.10) で指定されたオブジェクトへのアクセス、オブジェクトの変更、ライブラリ I/O 関数の呼び出し、またはこれらの操作のいずれかを実行する関数の呼び出しはすべて副作用です。
したがって、どちらも同じスカラー オブジェクトでシーケンス化されていない副作用が発生することを禁止しているため、C では次のことが許可されますが、C++ では未定義の動作になります。
int a = 0;
volatile int *pa = &a;
int b = *pa + *pa;
仕様を正しく読んでいますか?また、もしそうなら、その不一致の理由は何ですか?