Счетчик на этапе компиляции

0

Я знаю, что это странный вопрос, но я пытаюсь найти способ анализа кода, написанного пользователем, и собрать полезную информацию, которая может быть включена в часть "if" и "else". Предположим, что у меня есть оператор if-else,

counter = 0;
if( true )
    ++counter;
else
    ++counter;

возможно ли, что я могу "заставить ++counter" работать и получать "counter = 2" во время компиляции? Шаблон? Макро? Любое другое решение? Заранее спасибо!

Теги:
templates
compile-time

1 ответ

1

Прежде всего, "счетчик" никогда не будет 2. Он всегда будет 1.

Я бы сказал, что около 90% компиляторов C++ (работающих в режиме "Release") распознают инвариант и генерируют объектный код, как если бы вы написали:

counter = 0;
++counter;

Большинство из них также доходят до

counter = 1;

Тем не менее, такая оптимизация не требуется Стандартом, поэтому нет возможности "заставить" компилятор их выполнять.

ПРИМЕЧАНИЕ. Спецификации для Java & С# требуют, чтобы компиляторы для этих языков распознавали инвариант, чтобы сделать elide if())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню