दो कार्यक्रमों को देखते हुए जहां स्रोत कोड में एकमात्र अंतर एक constexpr
की उपस्थिति या अनुपस्थिति है, क्या यह संभव है कि कार्यक्रम का अर्थ बदल जाए?'constexpr' जोड़ना व्यवहार बदल सकता है?
दूसरे शब्दों में, यदि संकलक से constexpr
का अनुमान लगाने के लिए वास्तव में कड़ी मेहनत करने के लिए संकलक से पूछने के लिए कोई संकलक विकल्प था, तो क्या यह मौजूदा मानक कोड तोड़ देगा और/या खराब तरीके से इसका अर्थ बदल देगा?
एक कोडबेस से निपटने की कल्पना करें जहां मूल डेवलपर constexpr
को उन स्थानों पर शामिल करना भूल गया जहां संभव था, शायद सी ++ 11 से पहले कोड लिखा गया हो। यह अच्छा होगा अगर कंपाइलर आपके काम पर आने में मदद के लिए constexpr
का अनुमान लगाएगा। बेशक, शायद यह हर बार इस धारणा के बारे में चेतावनी देना चाहिए, जिससे आप स्पष्ट रूप से constexpr
को स्पष्ट रूप से जोड़ सकते हैं। लेकिन यह अभी भी उपयोगी होगा। मेरी चिंता यह है कि यह चीजों को तोड़ सकता है?
अब तक, केवल एक चीज मैं के बारे में सोच सकते हैं कि constexpr
कार्यों परोक्ष inline
हैं और स्थितियों inline
जोड़ने बुरा तरीकों से चीजों को बदल सकते हैं, जहां हो सकता है; उदाहरण के लिए यदि आप एक-परिभाषा-नियम तोड़ते हैं।
ठीक है, उदाहरण के लिए संकलक विक्रेताओं constexpr के रूप में मानक में चिह्नित नहीं कार्यों कि SFINAE के माध्यम से अलग व्यवहार का कारण बन सकता चिह्नित करने के लिए है, इसीलिए उसे था यह अंततः की अनुमति नहीं थी चुनते हैं, देखें [यह गैर के इलाज के लिए एक अनुरूप संकलक विस्तार है -constexpr मानक पुस्तकालय कार्यों को constexpr के रूप में?] (http://stackoverflow.com/q/27744079/1708801) –
उस @ShafikYaghmour के लिए धन्यवाद। मैंने विचलन खोजने की कोशिश करने के लिए SFINAE के साथ कुछ प्रयोग किए थे, लेकिन मैं नहीं कर सका। मुझे लगता है कि मेरी उदाहरण भी साधारण :) –
थे मैं एक है [एक उदाहरण यहां जहां SFINAE टूट जाता है] (http://stackoverflow.com/a/21319414/1708801) स्थिर भाव में अपरिभाषित व्यवहार के विभिन्न उपचार की वजह से। मुझे अभी भी कोई जवाब नहीं है कि क्या इसे अनुरूप माना जाता है या नहीं। बिल्कुल वही नहीं है लेकिन हम देख सकते हैं कि अलग-अलग कार्यान्वयन SFINAE को कैसे तोड़ सकते हैं। –