मानक में गैर-मानक नोट अभिव्यक्ति की अवधारणा को प्रेरित करने के लिए है, लेकिन वास्तविक परिभाषा नहीं है। अभिव्यक्ति की परिभाषा भाषा व्याकरण में दी गई है जो धारा 5 के शेष में दी गई है। अभिव्यक्तियां कुछ टर्मिनल जैसे अक्षर, चर के नाम और कार्यों के नामों से बनाई गई हैं, जो अंकगणित जैसे ऑपरेटरों का उपयोग करके संयुक्त होते हैं और संबंध ऑपरेटर।
घोषणाएं और अभिव्यक्ति अलग वाक्य रचनात्मक संस्थाएं हैं, इसलिए सी ++ प्रोग्राम के अंदर एक घोषणा कभी अभिव्यक्ति नहीं होती है, और इसके विपरीत। अंतर एक नज़र में देखने के लिए काफी आसान है: अगर यह कुछ घोषित करता है, तो यह एक घोषणा है।
1; // expression statement
int i = 1; // declaration statement that declares `i`
A(i, 42); // expression statement that creates an A object
A a(i); // declaration statement that declares an A object (named a)
एक घोषणा भाव मूल्यांकन कर सकते हैं लेकिन एक घोषणा एक अभिव्यक्ति नहीं है। आप सही मायने में बताते हैं कि कक्षा के किसी ऑब्जेक्ट की घोषणा एक कन्स्ट्रक्टर कॉल का कारण बन सकती है। फिर भी यह वाक्य रचनात्मक रूप से एक घोषणा है और अभिव्यक्ति नहीं है।
हालांकि, एक और भावना है जिसमें एक घोषणा एक अभिव्यक्ति है। अर्थात्, अभिव्यक्तियों के भीतर मूल्यांकन के अनुक्रमण के नियम भी घोषणाओं पर लागू होते हैं। उदाहरण के लिए, एक नियम है कि int
पर पोस्टफिक्स वृद्धि का दुष्प्रभाव पूर्ण अभिव्यक्ति के अंत से पहले किसी बिंदु पर होता है।
f(i++) + g(); // i may be incremented before or after g() is called...
h(); // but definitely before h() is called.
ऐसे नियमों के प्रयोजनों के लिए, एकल चर की घोषणा और प्रारंभिकता को पूर्ण अभिव्यक्ति भी माना जाता है। कक्षा प्रकार के चर के मामले में, कन्स्ट्रक्टर कॉल उस अभिव्यक्ति का हिस्सा है।
int i = 1; // this declaration evaluates a full-expression
// whose effect is to initialize `i` to 1
int j = f(i++) + g(), k = h(); // two separate full-expressions;
// i is incremented before h() is called
जब मानक पढ़ना, आप क्रम में संदर्भ विचार करने के लिए यह पता लगाने की "अभिव्यक्ति" का क्या अर्थ का मतलब है की जरूरत है।
संभावित डुप्लिकेट [सी ++ में अभिव्यक्ति और अभिव्यक्ति कथन क्या है?] (Http: // stackoverflow।कॉम/प्रश्न/7479 9 46/व्हाट्स-ए-एक्सप्रेशन-एंड-एक्सप्रेशन-स्टेटमेंट-इन-सी) –
अंगूठे का एक साधारण नियम यह है कि अभिव्यक्ति में सेमी-कोलन नहीं होते हैं। अर्ध-कोलन जोड़ना उन्हें बयान में बदल देता है। इसके अलावा, एक अभिव्यक्ति कुछ है जो आप कोष्ठक के साथ लपेट सकते हैं और किसी अन्य अभिव्यक्ति के अंदर उपयोग कर सकते हैं। आप 'x = (int i = 1;)' नहीं लिख सकते हैं। –
व्याकरण की जांच करें, मैंने इसे यहां निकाला है: https://github.com/o11c/chintzy/blob/master-py/chintzy/_std/cxx14.py#L559 – o11c