2015-09-21 5 views
6

सी/C++ में,अपरिभाषित व्यवहार, या: स्विफ्ट में अनुक्रम बिंदु हैं?

int i = 0; 
int j = i++ + i++ + ++i; 

में दूसरा बयान है, दोनों

  • अनिर्दिष्ट व्यवहार आह्वान क्योंकि ऑपरेंड के मूल्यांकन के आदेश अनिर्दिष्ट है, और
  • अपरिभाषित व्यवहार , क्योंकि एक ही ऑब्जेक्ट पर दुष्प्रभाव i एक-दूसरे के सापेक्ष अपरिचित हैं।

उदाहरण

अब के लिए देखें, यह देखते हुए कि स्विफ्ट एक सुरक्षित भाषा के रूप में डिजाइन किया गया था, क्या इसी स्थिति यहाँ है?

var i = 0 
let j = i++ + i++ + ++i 

का परिणाम अच्छी तरह से परिभाषित है? क्या स्विफ्ट पुस्तक में j == 4 में भाषा संदर्भ से निष्कर्ष निकाला जा सकता है?

+2

यह पूछने का एक अच्छा सवाल है, लेकिन दुर्भाग्यवश, मुझे यह महसूस हो रहा है कि उत्तर वर्तमान में "कोई नहीं जानता" ... – jtbandes

+0

@jtbandes: धन्यवाद (लेकिन कोई असहमत है :) - आप शायद सही हैं। मैंने अब ऐप्पल डेवलपर फोरम में इसे क्रॉस-पोस्ट किया है, शायद कुछ फीडबैक देता है: https://forums.developer.apple.com/thread/20001। –

+1

बहुत बढ़िया - क्रिस लैटनर ने जवाब दिया। मैं चुपके से उम्मीद कर रहा था कि जवाब "बाएं से दाएं" था :) – jtbandes

उत्तर

5

सवाल एप्पल डेवलपर और स्विफ्ट डिजाइनर एप्पल डेवलपर फोरम https://forums.developer.apple.com/thread/20001#63783 में क्रिस Lattner द्वारा उत्तर दिया गया था:

हां, यह अभिव्यक्ति का परिणाम हमेशा 4. स्विफ्ट भाव बाएं से दाएं मूल्यांकन करता है हो जाएगा, यह अपरिभाषित नहीं है या कार्यान्वयन सी की तरह व्यवहार परिभाषित

क्रिस भी कहा:

कहा, अगर आप इस तरह कोड लिखने, किसी ने इसे बनाए रखने की कोशिश कर रहा शायद

सहमत बहुत आप के साथ खुश नहीं होगा! यह समस्या का प्रदर्शन करने के लिए एक चरम उदाहरण के रूप में था।

+1

एक अद्यतन: अब खुला स्रोत [स्विफ्ट इवोल्यूशन] 9https: //github.com/apple/swift-evolution/blob/master/proposals/0004- remove-pre-post-inc-decrement.md) प्रक्रिया, '--' और' ++ 'को भविष्य के स्विफ्ट संस्करणों से हटाया जाना है। – rickster

+0

@rickster: आप सही हैं, यहां जानकारी जोड़ने के लिए धन्यवाद! - लेकिन इन ऑपरेटरों के बिना भी, तथ्य यह है कि स्विफ्ट सही अभिव्यक्तियों का मूल्यांकन करता है जो सही है (मेरी राय में)। –

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