C++ में एक रोपण मूल्य का आकलन करती माने जा:
int c = 5; // evaluates to 5, as you can see if you print it out
float pi = CalculatePi(); // evaluates to the result
// of the call to the CalculatePi function
तो, आप बयान:
a = b
if (b) { }
a = &c
while (&c) { }
जो एक ही कर रहे हैं:
if (a = b) { }
while (a = &c) { }
मोटे तौर पर के बराबर हैं
के रूप में
और क्या उन if (a)
आदि जब वे बूलियन्स नहीं कर रहे हैं के बारे में? खैर, अगर वे पूर्णांक हैं, 0 झूठा है, बाकी सच है। यह (एक "शून्य" मूल्य -> झूठी, बाकी -> सच) आम तौर पर रखती है, लेकिन तुम सच में ++ संदर्भ एक सी का संदर्भ लेना चाहिए सुनिश्चित करने के लिए (हालांकि ध्यान दें कि writting if (a == 0)
ज्यादा if (!a)
की तुलना में अधिक मुश्किल नहीं है, ज्यादा किया जा रहा है पाठक के लिए आसान)।
वैसे भी, आपको हमेशा अपने प्रभाव को अस्पष्ट करने वाले दुष्प्रभावों से बचना चाहिए।
आप चाहिए कभी नहींif (a = b)
करने की ज़रूरत: आप अन्य तरीकों कि और अधिक स्पष्ट कर रहे हैं और कहा कि एक गलती की तरह नहीं होगा (अगर मैं पहली बात यह आता है कि if (a = b)
की तरह एक कोड को पढ़ने में बिल्कुल वही बात प्राप्त कर सकते हैं दूसरे, अगर मैं ट्रिपल जांच करें कि यह सही है, कि मैं उसे नफरत है
गुड लक
स्रोत
2010-01-05 03:05:47
एक स्टाइल सम्मेलन के रूप में, अधिकांश कंपाइलर इस मामले के लिए चेतावनी जारी करते हैं (कुछ "बूलियन संदर्भ में असाइनमेंट" या "क्या आपका मतलब ==?") है, और कई लोग इस शैली का उपयोग करते हैं कि असाइनमेंट-ए-टेस्ट एक्सप्रेशन जानबूझकर है: 'अगर ((ए = बी)) {...}' – greyfade
मैं व्यक्तिगत रूप से 'अगर (static_cast (ए = बी)) {} '- निहित कास्ट स्पष्ट बना देता हूं। कुछ पागल अधिभार ऑपरेटर के मामले में –
MSalters
= किसी अन्य संदर्भ को वापस कर सकता है, जो कि (ए = बी) ए के बराबर नहीं है। ऑफसी, उस मामले में हमें लेखक की संवेदना – Swift