Я изучал встроенные статические переменные в C++17 и их инициализацию в нескольких единицах трансляции. Я понимаю, что встроенные статические переменные вводятся для поддержания единого экземпляра в программе, обеспечивая при этом потокобезопасную инициализацию. Однако, когда вы используете встроенные статические переменные, компилятор, похоже, добавляет проверку, чтобы гарантировать, что переменная инициализируется потокобезопасным способом. Это необходимо, поскольку компилятор не может предсказать, какая единица трансляции выполнит инициализацию первой, из-за включения заголовочного файла в несколько единиц трансляции.
Из того, что я понял, кажется, это своего рода защитный механизм (как показано в ассемблерном коде, указанном ниже), который предотвращает множественную инициализацию.
Итак, мои вопросы:
1 ) В каждой единице трансляции имеется ли защита потоков для инициализации во время во время выполнения?
2)После инициализации переменной правильно ли, что никакие примитивы синхронизации не нужны, когда к ней обращаются/используют ее во всей программе?
https://godbolt.org/z/hhWoK7Y3r
#include
#include
class Thing
{
public:
inline const static std::string name{"Miko"};
};
Подробнее здесь: https://stackoverflow.com/questions/793 ... -members-a
Как C++17 обрабатывает поточно-безопасную инициализацию встроенных статических элементов данных в нескольких единицах тр ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как преобразовать инициализацию копии в инициализацию прямого списка при проверке clang-tidy?
Anonymous » » в форуме C++ - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-