मैं एक लॉगिंग मॉड्यूल का उपयोग कर रहा हूं जो रनटाइम पर सक्षम/अक्षम रिपोर्टिंग कर सकता है। कॉल आम तौर पर की तरह कुछ जाना:उत्तीर्ण तर्कों के सी ++ संकलक अनुकूलन
WARN(
"Danger Will Robinson! There are "
+ boost::lexical_cast<string>(minutes)
+ " minutes of oxygen left!"
);
मैं चेतावनी के लिए एक इनलाइन समारोह का उपयोग कर रहा है, लेकिन मैं कितना अनुकूलन पर्दे के पीछे चल रहा है के रूप में उत्सुक हूँ - पूरे कार्यक्रम के दौरान तर्क का मूल्यांकन होगा महंगा हो।
bool WARNINGS_ENABLED = false;
inline void WARN(const string &message) {
if (!WARNINGS_ENABLED) {
return;
}
// ...
}
यह देखते हुए कि स्ट्रिंग तर्क के निर्माण में कोई साइड इफेक्ट, संकलक इसे बाहर अनुकूलित करेंगे: WARN
समारोह कुछ इस तरह चला जाता है? कुछ x
के लिए g++
में अनुकूलन का एक निश्चित स्तर आवश्यक है (-Ox
)?
यह काम करना चाहिए, अच्छी तरह से किया जाना चाहिए। –
हाँ - एक स्पष्ट स्थिति जहां मैक्रोज़ इनलाइन फ़ंक्शंस पर उपयोग करने की आवश्यकता है। – cdleary
+1 लेकिन यह वास्तव में होना चाहिए: # परिभाषित करें {अगर) {if (WARNINGS_ENABLED) WARN2 (ओं) करें; } जबकि (झूठा) –