2012-02-29 8 views
9

जैसा कि मैं इसे समझता हूं, constexpr टेम्पलेट मेटाप्रोग्रामिंग के विपरीत पूर्ण नहीं है, इसलिए मेरा मानना ​​है कि ये समान नहीं हैं। तो सवाल यह है कि constexpr किस हद तक टेम्पलेट मेटाप्रोग्रामिंग अप्रचलित बनाता है?सी ++ 11 constexpr?

+1

'constexpr' ट्यूरिंग पूर्ण है (स्पष्ट रूप से अनंत आवश्यकताओं को अनदेखा कर रहा है)। –

+0

@ आर। मार्टिन्होफर्नैंड्स: यदि 'कॉन्टेक्सप्र' पूर्ण ट्यूरिंग है, तो कृपया दोनों सिरों में बढ़ने योग्य पूर्णांक की सूची मॉडल करने के लिए केवल 'constexpr' का उपयोग करें। – kennytm

+0

@ आर। मार्टिनिन्हो फर्नांडीस: आप http://stackoverflow.com/questions/9201506/is-constexpr-based-computation-turing-complete के उत्तर को पोस्ट करने में दिलचस्प हो सकते हैं। – kennytm

उत्तर

21

constexpr बिल्कुल ट्यूरिंग-पूर्ण है। रिकर्सन की अनुमति है। संकलन समय के साथ-साथ रनटाइम पर काम करने वाले कार्यों को परिभाषित करने का यह एक सुविधाजनक तरीका है। constexpr फ़ंक्शंस, केवल फ़ंक्शंस होने पर, प्रकारों पर संचालन नहीं कर सकते हैं, हालांकि। (जब तक आप टेम्पलेट मेटाप्रोग्रामिंग का उपयोग निश्चित रूप से निर्दिष्ट फ़ंक्शन को परिभाषित करने के लिए नहीं करते हैं।)

दोनों कक्षा टेम्पलेट्स और constexpr का उपयोग संकलन-समय निरंतर अभिव्यक्तियों को रखने के लिए किया जा सकता है, लेकिन समानता समाप्त होती है। वे अनावश्यक नहीं हैं और जल्द ही टीएमपी कभी नहीं जा रहे हैं।

कुछ विशेष रूप से बदसूरत संकलन-समय की गणना उचित कार्यों के रूप में अधिक सुंदर ढंग से फिर से लिखी जा सकती है।

+5

+1 कि 'constexpr' प्रकारों पर काम नहीं कर सकता है। –

+0

इसे समझाने के लिए धन्यवाद ... – polapts