मैं उपयोगकर्ता परिभाषित अक्षर का परीक्षण कर रहा हूं। मैं _fac
संख्या के फैक्टोरियल को वापस करना चाहता हूं।उपयोगकर्ता परिभाषित शाब्दिक तर्क constexpr नहीं हैं?
इसे constexpr
फ़ंक्शन काम करने के बाद, हालांकि यह मुझे टेम्पलेट्स के साथ ऐसा करने नहीं देता है क्योंकि संकलक शिकायत करता है कि तर्क constexpr
नहीं हो सकते हैं।
मैं इस से उलझन में हूं - सचमुच निरंतर अभिव्यक्ति नहीं हैं? 5
5_fac
में हमेशा एक शाब्दिक है जिसका संकलन समय के दौरान मूल्यांकन किया जा सकता है, तो मैं इसका उपयोग क्यों नहीं कर सकता?
सबसे पहले विधि:
constexpr int factorial_function(int x) {
return (x > 0) ? x * factorial_function(x - 1) : 1;
}
constexpr int operator "" _fac(unsigned long long x) {
return factorial_function(x); // this works
}
दूसरी विधि:
template <int N> struct factorial_template {
static const unsigned int value = N * factorial_template<N - 1>::value;
};
template <> struct factorial_template<0> {
static const unsigned int value = 1;
};
constexpr int operator "" _fac(unsigned long long x) {
return factorial_template<x>::value; // doesn't work - x is not a constexpr
}
मुझे नहीं लगता कि कोई संकलक अभी तक उन उपयोगकर्ता परिभाषित अक्षरों को लागू करता है। आप इसका परीक्षण कैसे कर रहे हैं? –
@KerrekSB जीसीसी 4.7 स्नैपशॉट – Pubby
अच्छा! मुझे नहीं पता था कि अभी तक समर्थित था। मेरे पास मशीन पर कहीं भी इंस्टॉल किया गया है, अब मैं उन वैरैडिक टेम्पलेट्स को काम करने के लिए प्रेरित हूं :-) –