निम्नलिखित कोड पर विचार करें। लेकिन यह क्यों है? सिद्धांत रूप में, constexpr फ़ंक्शंस केवल अन्य constexpr कार्यों को कॉल कर सकते हैं। हालांकि, इस बात की कोई गारंटी नहीं है कि ऑपरेटरों को समेकित कार्य होंगे। उदाहरण के लिए, मान लीजिए कि मैं निम्नलिखित इंटरफेस के साथ किसी प्रकार डालते हैं:constexpr टेम्पलेट्स के साथ क्यों काम करता है?</p> <pre class="lang-cpp prettyprint-override"><code>template<typename T> constexpr inline T fma(T a, T b, T c) { return a * b + c; } </code></pre> <p>यह ठीक संकलित:
ऑपरेटरों + और * नहीं constexpr हैं। अगर मैं निम्नलिखित कोड लिखें:
fma(someType(), someType(), someType());
यह एक constexpr समारोह गैर constexpr कार्यों बुला रहा है क्योंकि संकलित करने के लिए असफल हो जाना चाहिए। लेकिन यह सिर्फ ठीक है। ऐसा क्यों है?
मैं -std = C++ 0x विकल्प के साथ MinGW के G ++ कंपाइलर का उपयोग कर रहा हूं।
उदाहरण के लिए जहां यह स्पष्ट रूप से स्पष्ट है कि यह सबकुछ अनुकूलित नहीं कर सकता है, यह जीसीसी 4.7.1 के साथ संकलित करता है जब तीन तर्क इनपुट किए जाते हैं, और परिणाम मुद्रित होते हैं: http://ideone.com/aBRPU – chris
इसे आज़माएं: 'constexpr someType dummy = fma (someType(), someType(), someType());';) – mfontanini
ओह, मैंने अभी मानक में पाया है कि 'constexpr' फ़ंक्शंस अंतर्निहित रूप से इनलाइन हैं, यदि यह आपको स्थान बचाता है। – chris