2013-03-06 13 views
14

जब मैं इस तरह की कुछ चर को परिभाषित कर रहा हूँ:सी ++: परिवर्तनशील घोषणा आरंभीकरण आदेश

int a = pop(), b = pop(), c = pop(); 

सी ++ एक गारंटी नहीं है कि a पहले प्रारंभ किया जा रहा है, तो b और फिर c देता है? या आदेश परिभाषित नहीं है?

+1

आप समझा सकते हैं क्यों यह महत्वपूर्ण है? हम एक बेहतर उत्तर दे सकते हैं – alestanis

+0

मैं 3 लाइनों के बजाय सिर्फ एक पंक्ति लिखना चाहता हूं :) – shoosh

+4

पठनीयता में सुधार करें और 3 लाइनों का उपयोग करके अपना ऑर्डर दें। यह इतना सरल है। वैसे भी दो लुसी लाइनों से छुटकारा पाने का क्या मतलब है? – stefan

उत्तर

11

[dcl.decl]/3 कहते हैं

-3- एक घोषणा में प्रत्येक init-declarator अलग से विश्लेषण किया जाता है जैसे कि यह अपने आप में एक घोषणा में था।

अपने कोड जिसका मतलब है की तरह व्यवहार किया जाता है:

int a = pop(); 
int b = pop(); 
int c = pop(); 
+2

हम्म - मुझे विश्वास नहीं है कि यह प्रारंभिकरण के अनुमानित आदेश का तात्पर्य है ... –

+3

जो अभी भी किसी भी विशेष आदेश की गारंटी नहीं देता है। –

+1

नोट 97 एक स्पष्टीकरण प्रदान करता है, लेकिन "आमतौर पर" काम का उपयोग करता है। मेरा मानना ​​है कि, हालांकि, इसका मतलब यह है कि इस नियम के लिए अच्छी तरह से परिभाषित अपवाद हैं, लेकिन यह "कंपाइलर तक नहीं" है। –

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