के रूप में constexpr फ़ंक्शन पैरामीटर मैं C++ 11 का उपयोग करके कुछ खिलौने कोड के साथ खेल रहा हूं ताकि चीजें कैसे काम करती हैं।टेम्पलेट तर्क
template <int x, int y>
class add {
public:
static constexpr int ret = x + y;
};
constexpr int addFunc(const int x, const int y) {
return add<x,y>::ret;
}
int main() {
const int x = 1;
const int y = 2;
cout << add<x,y>::ret << endl; // Works
cout << addFunc(1,2) << endl; // Compiler error
return 0;
}
मैं जीसीसी 4.8.1 का उपयोग कर रहा है और उत्पादन है:
'एक्स' प्रकार के लिए टेम्पलेट तर्क में एक निरंतर अभिव्यक्ति नहीं है 'पूर्णांक इस दौरान मैं निम्नलिखित मुद्दा यह है कि करने के लिए नीचे सरल में आए '
' वाई पूर्णांक '
वास्तव में क्या दो तरीके मैं add::ret
गणना करने के लिए कोशिश कर रहा हूँ के बीच अंतर है' प्रकार के लिए टेम्पलेट तर्क में एक निरंतर अभिव्यक्ति नहीं है '? इन दोनों मानों को संकलन समय पर उपलब्ध होना चाहिए।
'constexpr' कार्यों को रनटाइम पर चलाने में सक्षम होना चाहिए। – chris
अच्छा ... हाँ। तो संकलन समय पर इसका मूल्यांकन क्यों नहीं किया जा सकता है? – Danny
विस्तारित करने के लिए: 'constexpr' फ़ंक्शंस रनटाइम पर चलाने में सक्षम होना चाहिए, और जब भी किसी भी मान के साथ बुलाया जाता है तो आपका 'constexpr' फ़ंक्शन विफल हो जाएगा जो संकलन-समय स्थिर नहीं है, इसलिए आपका' constexpr' फ़ंक्शन मान्य नहीं है । जो आप खोज रहे हैं वह वह नहीं है जो 'constexpr' प्रदान करता है, और सी ++ कुछ अन्य रूप में प्रदान नहीं करता है। निकटतम क्या आता है 'int x' और 'int y' टेम्पलेट पैरामीटर के साथ' addFunc 'टेम्पलेट फ़ंक्शन बना रहा है। – hvd