मानक (अनुभाग 6.5.16.2, बिंदु 3) से:
एक यौगिक काम फार्म केE1सेशन=E2 सरल काम अभिव्यक्ति से अलग है * ई 1 = ई 1सेशन(ई 2) केवल उस समय में lvalue ई 1 का मूल्यांकन केवल एक बार किया जाता है।
यही है, अगर इसके बजाय आप
*a += 1
कर रहे हैं यह केवल लक्ष्य स्थान का निर्धारण करेगा एक बार के बजाय दो बार। आपके उदाहरण में "सरल" चर के लिए, इससे कोई फर्क नहीं पड़ता है। बेशक, यदि संकलक जानता है कि इसे दो बार करने की आवश्यकता नहीं है, तो यह अभी भी अनुकूलित हो सकता है और इसे एक बार कर सकता है। यदि ऐसी अन्य संस्थाएं हैं जो सूचक (जैसे किसी अन्य धागे) को बदल सकती हैं, तो एक वास्तविक अंतर होता है।
संपादित करें: शायद एक बेहतर उदाहरण कुछ निम्नलिखित की तरह अजीब है (वास्तव कोस कि & ख == & मेरे मामले में एक -1):
int a, b, *p;
a = 1; b = 5; p = &a;
*p += (--p == &b) ? 1 : 0;
printf("%d %d\n",a,b); // prints 1 6, because --p happens first, then *p
a = 1; b = 5; p = &a;
*p = *p + ((--p == &b) ? 1 : 0);
printf("%d %d\n",a,b); // prints 1 2, because the second *p is evaluated first,
// then --p and then the first *p
हाँ, दूसरे में अधिक टाइपिंग शामिल है .... –
आप किस अंतर की उम्मीद कर रहे हैं? किस संदर्भ में अंतर? आपका प्रश्न उन टिप्पणियों के बिना ऑफ-विषय है। – 2501
आंतरिक प्रक्रिया की तरह –