Я знаю, что это странный вопрос, но я пытаюсь найти способ анализа кода, написанного пользователем, и собрать полезную информацию, которая может быть включена в часть "if" и "else". Предположим, что у меня есть оператор if-else,
counter = 0;
if( true )
++counter;
else
++counter;
возможно ли, что я могу "заставить ++counter" работать и получать "counter = 2" во время компиляции? Шаблон? Макро? Любое другое решение? Заранее спасибо!
Прежде всего, "счетчик" никогда не будет 2. Он всегда будет 1.
Я бы сказал, что около 90% компиляторов C++ (работающих в режиме "Release") распознают инвариант и генерируют объектный код, как если бы вы написали:
counter = 0;
++counter;
Большинство из них также доходят до
counter = 1;
Тем не менее, такая оптимизация не требуется Стандартом, поэтому нет возможности "заставить" компилятор их выполнять.
ПРИМЕЧАНИЕ. Спецификации для Java & С# требуют, чтобы компиляторы для этих языков распознавали инвариант, чтобы сделать elide if()
)