यदि परिणाम एक ही रन के दौरान भिन्न हो सकता है, तो आप अपनी स्थिति को सस्ते हिस्से और एक महंगी हिस्से में विभाजित करने के लिए बूलियन ऑपरेटर के आलसी मूल्यांकन का उपयोग करने में सक्षम हो सकते हैं, और पहले सस्ते भाग को चला सकते हैं।
if (a == 5 && somethingexpensive())
{
...
}
की गणना a == 5
के बाद से somethingexpensive()
की तुलना में सस्ता है, और यह लगभग हमेशा है अगर false
आप इसे पहले चलाना चाहिए, जो somethingexpensive
खंड का मूल्यांकन टाल।
यदि दूसरी ओर परिणाम प्रोग्राम के एक रन के लिए निरंतर है, तो आप इसे स्थिर या वैश्विक चर में गणना के परिणाम को संग्रहीत करके अनुकूलित कर सकते हैं।
static int result = doevalfunctiononlyonce();
if (result)
{
....
}
इस तरह आप एक सरल स्मृति देखने के लिए if
की लागत को कम कर दिया।
हालत केवल एक और प्रक्रिया में एक कार्रवाई के जवाब में बदल जाता है, तो आप उस प्रक्रिया से वैश्विक अद्यतन कर सकते हैं:
int condition;
void appendToList(int a)
{
list.append(a);
if (list.somethingexpensive())
{
condition = true;
} else
{
condition = false;
}
}
void someotherfunction()
{
// if (list.somethingexpensive())
if (condition)
{
...
}
}
यह उपयोगी है अगर someotherfunction
अधिक बार appendtolist
समारोह से बहुत सारे कहा जाता है।
स्रोत
2010-01-25 16:08:59
संबंधित: http://stackoverflow.com/questions/1668013/can-likely-unlikely-macros-be-used-in-user-space-code –