Мне всегда говорили, что компилятор достаточно умен, чтобы исключить мертвый код. Большая часть кода, который я пишу, имеет много информации, известной во время компиляции, но код должен быть написан в наиболее общей форме. Я не знаю ни одной сборки, поэтому не могу проверить сгенерированную сборку. Какой код можно эффективно исключить из финального исполняемого файла?
Несколько примеров, но не ограничиваясь
f(bool b){
if(b){
//some code
}else{
//some code
}
}
f(true);
//////////////////////////
template<bool b>
f(){
if(b){
//some code
}else{
//some code
}
}
f<true>();
///////////////////////////
Что, если определение f
находится в другом объектном коде, а вызываемый f(true)
находится в основном. Будет ли оптимизация времени компоновки эффективно устранять мертвый код? Какой стиль кодирования/вариант компилятора/уловка для облегчения устранения мертвого кода?