मैं "Printing 1 to 1000 without loop or conditionals" के लिए प्रतिक्रियाओं पढ़ रहा था और मैं सोच रहा हूँ क्यों यह NumberGeneration < 1> शीर्ष जवाब में के लिए विशेष परिस्थिति में करने के लिए आवश्यक है।संकलन समय प्रत्यावर्तन और सशर्त,
यदि मैं इसे हटा देता हूं और टेम्पलेट (नीचे कोड) में एन == 1 के लिए एक चेक जोड़ता हूं, तो कोड "टेम्पलेट इंस्टेंटेशन गहराई अधिकतम से अधिक" के साथ संकलन में विफल रहता है लेकिन मुझे यकीन नहीं है कि क्यों। संकलित समय संकलित समय में अलग-अलग हैं?
#include <iostream>
template<int N>
struct NumberGeneration
{
static void out(std::ostream& os)
{
if (N == 1)
{
os << 1 << std::endl;
}
else
{
NumberGeneration<N-1>::out(os);
os << N << std::endl;
}
}
};
int main()
{
NumberGeneration<1000>::out(std::cout);
}
धन्यवाद, यह समझ में आता है, मैं वास्तव में संकलन-समय तत्कालता के बारे में सोच नहीं रहा था और था यह उम्मीद है कि कोड पहुंचने पर ही किया जाएगा। –
@ baris.m: लेकिन "कोड पहुंचने" के द्वारा आपका क्या मतलब है इसका एक महत्वपूर्ण सूक्ष्मता है: यह संकलक द्वारा हमेशा संकलन के दौरान, और फिर फिर * सशर्त रूप से * प्रोग्राम निष्पादन के दौरान रनटाइम पर पहुंच जाता है। –
मेरी टिप्पणी में मैं रनटाइम पर पहुंचने के बारे में बात कर रहा था। आपका जवाब सही समझ में आता है। –