Программы на C++. Форум разработчиков
1760955599
Anonymous
Я читаю это: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3292r0.html
Вот пример кода, о котором идет речь:
[code]int dummy;
std::atomic ptr_to_int_1{&dummy};
std::atomic ptr_to_int_2{&dummy};
void t1() {
int* q = ptr_to_int_1.load(relaxed);
int* p = f(q);
// Can get moved before the load of ptr_to_int_1
ptr_to_int_2.store(p, relaxed);
}
[/code]
В документе говорится, что ptr_to_int_2.store можно переместить в начало t1. Почему это разрешено? Что касается меня, вызов не может идти перед строкой int* p = ..., поскольку вычисление p является обязательным условием для вызова store.
Подробнее здесь: [url]https://stackoverflow.com/questions/79794791/why-stdatomicstore-can-be-moved-ahead-of-its-arguments-initialization-in-ru[/url]