C++: операторы const static DEBUG и if, каковы фактические накладные расходы во время выполнения?C++

Программы на C++. Форум разработчиков
Anonymous
 C++: операторы const static DEBUG и if, каковы фактические накладные расходы во время выполнения?

Сообщение Anonymous »

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

Код: Выделить всё

#define PI 3.1415926
заменяются везде в вашем коде, что приводит к странным заменам, когда имя переменной содержит строку PI.

Поэтому при отладке я избегаю следующего подхода:

Код: Выделить всё

#define _DEBUG
...
#ifdef _DEBUG
// debug code
#endif
...
но подумал, что это будет «безопаснее» использовать:

Код: Выделить всё

const static bool DEBUG = true
int main()
{
...
if(DEBUG){ /* debug code*/ }
...
}
Это работает хорошо, но мне интересно, какие накладные расходы при этом подходе по сравнению с подходом с использованием операторов препроцессора возникают во время выполнения? При использовании препроцессора все происходит до компиляции, поэтому не следует ожидать никаких накладных расходов во время выполнения.

Я знаю, что накладные расходы на простой оператор if в значительной степени незначительны, но это не справедливо, когда он помещается глубоко в какой-либо вложенный оператор. циклы, которые выполняются большое количество раз (маленькие вещи складываются в большие).

Признает ли компилятор тот факт, что DEBUG является const static< /code> и жестко закодировать это в исполняемом файле, уже включая или отключая код отладки во время компиляции? Что заставляет меня подозревать это, так это то, что на днях, когда я работал над каким-то несвязанным кодом, компилятор предупредил меня о том, что некоторая часть кода устарела, потому что окружающий ее оператор if никогда не станет истинным (если я правильно помню) ).

Подробнее здесь: https://stackoverflow.com/questions/100 ... on-time-ov

Вернуться в «C++»