Описание тега constinit
2
ответа
Что такое constinit в C++20?
constinit- это новое ключевое слово и спецификатор в C++20, предложенный в P1143. В стандарте предусмотрен следующий пример: const char * g() { return "dynamic initialization"; } constexpr const char * f(bool p) { return p ? "constant initializer" :…
08 сен '19 в 22:31
1
ответ
В чем реальная разница между "constinit" и "constexpr"?
constexpr int f() { return 0; } int g() { return 0; } constexpr auto c1 = f(); // OK constinit auto c2 = f(); // OK constexpr auto d1 = g(); // ill-formed constinit auto d2 = g(); // ill-formed int main() {} Как показано в приведенном выше коде, я н…
18 июн '20 в 10:22
0
ответов
Когда использовать constinit и consteval?
Использование constexpr довольно просто, чтобы убедиться, что код может быть оценен во время самой компиляции. Но последние функции C++ 20, которые обеспечивают constinit а также constevalнемного сбивают с толку. Может ли кто-нибудь предоставить пра…
05 июл '20 в 11:11
1
ответ
Когда вызывается деструктор объекта constinit?
Обычно говорят, что деструкторы статических объектов вызываются в порядке, обратном конструкторам. Насколько я понимаю, объекты constinit инициализируются во время компиляции, поэтому их деструкторы должны вызываться после деструкторов "обычных" ста…
16 июл '20 в 08:40
1
ответ
Может ли C++20 `constinit` отказаться от изящной идиомы счетчика?
Представлен C++20 constinit чтобы избежать фиаско с порядком статической инициализации. Может constinitотказаться от изящной идиомы счетчика (например, для инициализацииstd::cout)?
17 мар '20 в 16:40
3
ответа
static_assert не работает при использовании constinit const. Путаница в переменных constinit, constinit const, constexpr, const, nonconst
У меня вопрос о функциях времени компиляции. Я понимаю, что static_assert должен работать только с типами, которые можно оценивать / вычислять во время компиляции. Таким образом, он не работает с std::string (пока что в gcc10 нет поддержки constexpr…
01 окт '20 в 17:29
2
ответа
В каком практическом случае полезно использовать «const constinit»?
Ответ на этот вопрос от Vittorio Romeo очень хорошо объясняет. В его ответе упоминается следующее: не эквивалентен, поскольку первое требует постоянного разрушения , а второе - нет. Хотя это довольно ясно, я не вижу в этом практического применения. …
02 июл '21 в 14:20
2
ответа
как гарантировать инициализацию переменной стека с постоянной времени компиляции
В C++20 у нас теперь есть . и . Теперь я могу гарантировать, что статическая переменная инициализируется результатом функции или с помощью . В ПОРЯДКЕ Я также могу гарантировать, что переменная стека инициализируется результатом consteval функция, в…
10 янв '22 в 12:54
0
ответов
Инициализировать указатель с constinit
Мне было интересно, могу ли я инициализировать указатель с помощью constinit в С++20, и я не нашел адекватного ответа в Интернете. У меня есть простой код: struct a { const char *s; // pointer I want to initialize int other_random_field; // This is …
15 май '22 в 17:11
1
ответ
Примеры объявления constinit, недостижимого в точке инициализирующего объявления
Из dcl.constinit: Диагностика не требуется, если объявление constinit недоступно в точке объявления инициализации. Что это значит? Думаю, примера будет достаточно. Что-то динамически инициализированное просто неправильно сформировано (из той же ссыл…
26 июн '22 в 20:20
0
ответов
строковые литералы в качестве аргументов шаблона вызывают дублирование и многословие кода
Строка, созданная во время компиляции, используется в качестве массива символов в структуре, и ее максимальный размер определяется этой строкой. Кроме того, эта структура используется в качестве переменной-члена в другой структуре, и в ней есть неск…
08 янв '23 в 20:37
0
ответов
Ветвь с if constexpr() для переменных constinit?
В следующем коде я пытаюсь создать структуру данных constexpr, а затем использовать один из инициализированных элементов constexpr () в методе для ветвления с помощьюif constexpr(). С логической точки зрения AFAIK ничего не говорит против этого: кон…
07 сен '22 в 15:30
0
ответов
Почему constinit разрешает UB?
Скажем, я инициализирую переменные следующим образом: #include <cstdint> constexpr uint16_t a = 65535; constinit int64_t b = a * a; // warning: integer overflow in expression of type 'int' results in '-131071' [-Woverflow] constexpr int64_t c …
07 июн '22 в 03:04