Содержит ли следующая программа UB
?
#include <iostream>
volatile int x;
int main() {
std::cout << (x + x);
}
Да, содержит. Несколько доступов к одному и тому же volatile объекту без упорядочения этих доступов (unsequenced access) - неопределенное поведение.
Доступ к volatile объектам испокон веков является частью наблюдаемого поведения (observable behavior) С++ программы. Поэтому доступ к volatile объекту (даже только на чтение) формально считается побочным эффектом (side effect) содержащего этот доступ выражения. А далее уже работает общая схема: наличие в выражении неупорядоченных побочных эффектов, воздействующих на один и тот же объект - это неопределенное поведение.
[n4659]
4.6 Program execution [intro.execution]
14 Reading an object designated by a volatile glvalue (6.10), modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment.[...]
17 [...]If a side effect on a memory location (4.4) 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 (4.7), the behavior is undefined.[...]
В новой структуре документа:
http://eel.is/c++draft/basic.exec#intro.execution-7
http://eel.is/c++draft/basic.exec#intro.execution-10
Виртуальный выделенный сервер (VDS) становится отличным выбором
в с++ машина видит char как целочисленный тип и можно просто брать и делать так:
Как правильно захватывать глобальные переменные в лямбде? Хочу использовать следующим образом, но выдаются предупрежденияКак их подавить?
Можно ли как-то включить в maincpp все возможные заголовочные файлы языка, чтобы каждый раз не думать, что подключать? Может есть специальный...
С функцией move вроде бы всё понятно: она приводит любую ссылку на объект к неконстантной rvalue-ссылке, которая в соответствующем контексте передастся...