C ++ форсировать контекст non constexpr

: host

Является синтаксисом для компоновки хост-компонента.

: host (.element)

Является экспериментальной функцией псевдокласса CSS CSS, которая выбирает the shadow host of the shadow DOM containing the CSS it is used inside ( Ссылка )

: host-context

Является синтаксисом для стилизации определенного класса вне любого текущего элемента. Класс должен быть применен к элементу за пределами текущего элемента.

Более подробную информацию о контексте угловых приложений можно найти в в этом сообщении в блоге .

1
задан max66 19 January 2019 в 12:31
поделиться

1 ответ

Есть ли способ заставить функцию constexpr не оцениваться во время компиляции [?]

Если вы можете изменить функцию constexpr, добавив неиспользуемый параметр, Вы можете принудительно выполнить оценку во время выполнения, передав значение времени выполнения.

Я имею в виду ... предположим, у вас есть следующая constexpr функция

constexpr int getVal ()
 { return 0; }

, которую вы можете использовать следующим образом

constexpr auto a = getVal();

auto b = getVal();

и (игнорируя правило "как есть" ) вы уверены, что getVal() вычисляется при инициализации во время компиляции a, но вы не знаете, вычислена ли она во время компиляции или во время выполнения b.

Но если вы измените функцию следующим образом

constexpr int getVal (int)
 { return 0; }

вы можете написать

   int c = 1;

   constexpr auto a = getVal(0);

   auto b = getVal(c);

, теперь вы можете быть уверены, что getVal() вычисляется при инициализации во время компиляции a (потому что a - это constexpr, а 0 - литерал), и это вычисляется во время инициализации b (потому что c нельзя использовать в выражении constexpr).

Вы также можете проверить, что при записи

int c = 1;

constexpr auto a = getVal(c);

вы получаете ошибку компиляции, потому что a должен быть инициализирован во время компиляции, но getVal(c) не может быть вычислен во время компиляции.

0
ответ дан max66 19 January 2019 в 12:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: