2017-09-25 12 views
16

इस सवालC++ ऑपरेटर ओवरलोडिंग कार्यों

What are the evaluation order guarantees introduced by C++17?

इस विनिर्देश

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0145r3.pdf

साथ

और

इसके अलावा विनिर्देश से इस पाठ के बारे में के साथ 17 मूल्यांकन आदेश , हम निम्नलिखित additio का सुझाव देते हैं नल नियम: का ऑर्डर ओवरलोडेड ऑपरेटर से जुड़ी अभिव्यक्ति का मूल्यांकन संबंधित अंतर्निहित ऑपरेटर से जुड़े ऑर्डर द्वारा निर्धारित फ़ंक्शन कॉल के नियमों के अनुसार निर्धारित नहीं है।

क्या इसका मतलब यह है कि ये दो अभिव्यक्ति बराबर नहीं हैं?

a << b; 
operator<<(a, b); 

जैसा कि दूसरा फ़ंक्शन कॉल जैसा दिखता है, इसलिए पैरामीटर में कोई गारंटीकृत मूल्यांकन आदेश नहीं है?

+7

यह सही है, दो अलग अलग वाक्यविन्यास अलग अर्थ विज्ञान अब है।ऑपरेटर सिंटैक्स में इसके अनोखे अर्थशास्त्र हैं, फ़ंक्शन कॉल सिंटैक्स में फ़ंक्शन कॉल के (नए!) अर्थशास्त्र हैं। –

+0

@KerrekSB यही कारण है कि यह प्रस्ताव: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0431r0.htm लिखा गया था लेकिन मुझे विश्वास नहीं है कि यह किसी भी प्राप्त हुआ है संकर्षण। – ForeverLearning

+0

@ForeverLearning: यह निश्चित रूप से एक विषय है जो दिल, दिमाग और प्रस्तावों को प्रेरित करता है! –

उत्तर

18

"जैसा कि दूसरा एक फ़ंक्शन कॉल जैसा दिखता है, इसलिए पैरामीटर में कोई गारंटीकृत मूल्यांकन आदेश नहीं है?"

दरअसल। [expr.call]/5 विशेष रूप से अपने प्रश्न में शामिल दो मामलों के बीच अंतर को कवर एक उदाहरण [जोर मेरा]:

पोस्टफ़िक्स अभिव्यक्ति अभिव्यक्ति-सूची में प्रत्येक अभिव्यक्ति और किसी भी डिफ़ॉल्ट तर्क से पहले अनुक्रम है। प्रत्येक संबंधित मूल्य गणना और पक्ष प्रभाव सहित पैरामीटर की शुरुआत, किसी भी अन्य पैरामीटर के संबंध में अनिश्चित रूप से अनुक्रमित है।

...

नोट: एक ऑपरेटर समारोह ऑपरेटर अंकन का उपयोग शुरू हो जाती है, तो तर्क मूल्यांकन के रूप में के लिए निर्दिष्ट अनुक्रम है निर्मित ऑपरेटर; [over.match.oper] देखें। [उदाहरण:

struct S { 
    S(int); 
}; 
int operator<<(S, int); 
int i, j; 
int x = S(i=1) << (i=2); 
int y = operator<<(S(j=1), j=2); 

initializations प्रदर्शन करने के बाद, i का मूल्य 2 है ( [expr.shift] देखें), लेकिन यह अनिर्दिष्ट है कि क्या j का मूल्य 1 या 2 है।

- अंत उदाहरण]

+0

आगे की ओर देखो: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0431r0.htm प्रस्तावित डीओए हालांकि था। – ForeverLearning

+0

@ForeverLearning संबंधित लिंक के लिए धन्यवाद, यह दिलचस्प है। – dfri

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