25

ऐसा लगता है कि हमें सी ++ के लिए "साक्षात्कार प्रश्न" की पूरी नई नस्ल मिल रही है (मुझे उम्मीद है कि वास्तव में नहीं)।सी ++ 17 में i ++ + i ++ का मूल्यांकन क्या होगा?

यह अपरिभाषित व्यवहार पहले सी ++ से 17 होने के लिए जाना जाता है, लेकिन यह अच्छी तरह से परिभाषित सी ++ 17 से ले कर हो जाएगा?

इस समय के बाद से वहाँ एक संकलक है कि इस सी ++ 17 संशोधन को लागू करता है, किसी को भी समझा सकता है क्या, अभिव्यक्ति मूल्यांकन नियमों के अनुसार, x का मूल्य निम्नलिखित कोड में होगा होना प्रतीत नहीं होता है?

int i = 0; 
int x = i++ + i++; 

Alisdair मेरेडिथ उसकी CppCon 2016 बात में इस उदाहरण here का उल्लेख है, लेकिन यह पूरी तरह से मेरे लिए स्पष्ट क्या x के अंतिम मूल्य हो जाएगा, हालांकि ऐसा लगता है नहीं है (कि वह क्या कह रहा है कि यह हो जाएगा है कम से कम 1)।

जाहिर है, i ही उस मामले में अभिव्यक्ति के अंत में 2 हो जाएगा।

+0

आप शायद पढ़ना चाहेंगे [यह अनुक्रमण और मूल्यांकन आदेश संदर्भ] (http://en.cppreference.com/w/cpp/language/eval_order)। –

+4

@LeoHeinsaar लगता है कि हमें भविष्य में हमारे प्रतिबिंब समायोजित करना होगा; पी ... –

+1

@ πάνταῥεῖ मैं समझता हूं, चिंता भी न करें। सब ठीक है। :-) –

उत्तर

18

P0145R3 (PDF) सभी भाव के मूल्यांकन के क्रम परिवर्तित नहीं होता। यह केवल ऑपरेटरों की एक छोटी संख्या को प्रभावित करता है। और उस सूची में बाइनरी अतिरिक्त नहीं है।

इसलिए उपरोक्त कोड अपरिभाषित बनी हुई है।

+1

लेकिन एलिसडेयर स्पष्ट रूप से अपनी स्लाइड में कहता है कि यह * अच्छी तरह से परिभाषित * है। मुझे संदेह है कि यह एक निरीक्षण है, या है ना? –

+2

मुझे यकीन है कि एलिसडेयर ने कहा था, लेकिन मुझे यकीन है कि P0145R3 उसके साथ सहमत नहीं है। पी 0145 का एक पुराना संस्करण वास्तव में बाइनरी ऑपरेटरों को सामान्य रूप से आदेश देने की पेशकश करता था, लेकिन वर्तमान संशोधन दायरे में अधिक सीमित है। इसलिए मैं कुछ स्लाइड के बजाए पेपर में वास्तव में क्या लिखा है, इसके साथ जा रहा हूं। –

+1

@LeoHeinsaar पीडीएफ की धारा 5 देखें। – NathanOliver

संबंधित मुद्दे