J'utilise un module de consignation qui peut activer/désactiver le reporting à l'exécution. Les appels vont généralement quelque chose comme:Optimisation du compilateur C++ des arguments passés
WARN(
"Danger Will Robinson! There are "
+ boost::lexical_cast<string>(minutes)
+ " minutes of oxygen left!"
);
J'utilise une fonction en ligne pour WARN, mais je suis curieux de savoir à quel point l'optimisation qui se passe dans les coulisses - évaluation des arguments tout au long de l'ensemble du programme serait être coûteux. La fonction WARN
va quelque chose comme ceci:
bool WARNINGS_ENABLED = false;
inline void WARN(const string &message) {
if (!WARNINGS_ENABLED) {
return;
}
// ...
}
Étant donné que la construction de l'argument de chaîne n'a pas d'effets secondaires, sera le compilateur d'optimiser dehors? Un certain niveau d'optimisation est-il requis (-Ox
dans g++
pour certains x
)?
Cela devrait fonctionner, bien fait. –
Yep - une situation claire où les macros doivent être utilisées sur des fonctions en ligne. – cdleary
+1 mais cela devrait être: #define WARN (s) do {if (WARNINGS_ENABLED) WARN2 (s); } while (false) –