Я использую модуль ведения журнала, который может включать/отключать отчеты во время выполнения. Звонки обычно идут примерно так:
WARN(
"Danger Will Robinson! There are "
+ boost::lexical_cast<string>(minutes)
+ " minutes of oxygen left!"
);
Я использую встроенную функцию для WARN, но мне любопытно, сколько оптимизации происходит за кулисами — оценка аргументов во всей программе будет дорогостоящей. Функция WARN
выглядит примерно так:
bool WARNINGS_ENABLED = false;
inline void WARN(const string &message) {
if (!WARNINGS_ENABLED) {
return;
}
// ...
}
Учитывая, что построение строкового аргумента не имеет побочных эффектов, оптимизирует ли его компилятор? Требуется ли определенный уровень оптимизации (-Ox
в g++
для некоторых x
)?