Если утверждения о константном значении времени компиляции

Я хочу, чтобы код был включен в функцию, основанную на значении постоянной времени компиляции, но static_if не является конструкцией в C ++.

Так что я могу написать такие функции, как это

class TA {
public:
template<bool flag>
void func() {
if(flag)
a++;
}

int a;
};int main() {
TA a;
a.func<true>();
a.func<false>();
}

И я хочу иметь гарантию, что компилятор выполняет две функции. Один, где ‘if (flag) a ++’ компилируется в функцию, а другой — где его нет.

Возможно ли получить эту гарантию на основе стандарта C ++ 17, или я во власти поставщика компилятора?

Благодарю.

0

Решение

На самом деле, C ++ 17 включает в себя именно то, о чем вы спрашиваете — он называется if constexpr,

Вы можете использовать его везде, где ваше условие может быть оценено во время компиляции (например, создание шаблона):

class TA {
public:
template<bool flag>
void func() {
if constexpr (flag)
a++;
}

int a;
};

Однако, как уже говорили другие, в этом примере вы вряд ли получите много, так как компилятор часто может оптимизировать подобные вещи.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]