Сложение нулевых volatile переменных выводит не ноль
Есть следующий код:
#include <iostream>
volatile int a;
int main() {
std::cout << a + a;
}
Почему выводится ненулевое значение?!
Ответы (1 шт):
Автор решения: dIm0n
→ Ссылка
Насколько я понимаю, у программы неопределённое поведение из-за выражения a + a, поэтому может выводить как 0, так и всё что угодно, либо не выводить ничего. Это следует из цитат:
Reading an object designated by a volatile glvalue ... are all side effects.
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.