Сложение нулевых volatile переменных выводит не ноль

Есть следующий код:

#include <iostream>

volatile int a;

int main() {
  std::cout << a + a;
}

Почему выводится ненулевое значение?!


Ответы (1 шт):

Автор решения: dIm0n

Насколько я понимаю, у программы неопределённое поведение из-за выражения a + a, поэтому может выводить как 0, так и всё что угодно, либо не выводить ничего. Это следует из цитат:

  1. Reading an object designated by a volatile glvalue ... are all side effects.

  2. If a side effect on a memory location is unsequenced relative to either another side effect on the same memory location or a value computation using the value of any object in the same memory location, and they are not potentially concurrent, the behavior is undefined.

Источник: http://eel.is/c++draft/intro.execution.

→ Ссылка