यहाँ "अभिव्यक्ति में अतिप्रवाह" मेरे कोडजीसीसी बराबर बराबर अभिव्यक्ति काम करता है, जबकि ठीक
#include <iostream>
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
static const unsigned long long int y = 36 * 36 * 36 * 36;
static const unsigned long long int yy = y * y;
int main()
{
std::cout << xx << std::endl;
std::cout << yy << std::endl;
return 0;
}
इस संकलन उत्पादन
# g++ -std=c++11 test.cpp -o test
test.cpp:2:62: warning: integer overflow in expression [-Woverflow]
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
है यह निष्पादन उत्पादन होता है
# ./test
18446744073025945600
2821109907456
कर सकते हैं आप समझाते हैं कि मैं यह चेतावनी और अलग-अलग परिणाम क्यों देखूं? अगर 36 चार में फिट हो सकता है तो 36^8 बिना हस्ताक्षर किए लंबे लंबे int में फिट हो सकता है, इसलिए मुझे यकीन नहीं है कि यहां क्या समस्या है, कृपया सलाह दें।
यह एक बहुत ही आम गलतफहमी प्रतीत होता है: यह बाद का इरादा किसी भी तरह के पहले कोड के अर्थ को प्रभावित करता है। (जहां "पहले" और "बाद में" उप-अभिव्यक्ति समावेशन ऑर्डरिंग का संदर्भ लें।) आमतौर पर यह सी ++ में मामला नहीं है; सबसे प्रभावशाली आप इस तरह के प्रभाव के लिए मिलता है जैसे कि एक कलाकार के अंदर पते के संचालन पर ओवरलोड रिज़ॉल्यूशन है। –