Когда я сегодня читаю C-стандарт, он говорит о побочных эффектах
Доступ к изменчивому объекту, изменение объекта, изменение файла или вызов функции что любая из этих операций является побочным эффектом
и в стандарте С++ говорится
Доступ к объекту, обозначенному изменчивым значением glvalue (3.10), модификацией объекта, вызовом функции ввода-вывода библиотеки или вызовом функции, которая делает любую из этих операций всеми побочными эффектами
Следовательно, поскольку оба запрещают непредсказуемые побочные эффекты на одном и том же скалярном объекте, C допускает следующее, но С++ делает его undefined поведение
int a = 0;
volatile int *pa = &a;
int b = *pa + *pa;
Я правильно читаю спецификации? И в чем причина несоответствия, если да?