मैं संकलन समय में एक स्ट्रिंग शाब्दिक की लंबाई की गणना करने की कोशिश कर रहा हूं। ऐसा करने के लिए मैं निम्नलिखित कोड का उपयोग कर रहा हूं:
#include <cstdio>
int constexpr length(const char* str)
{
return *str ? 1 + length(str + 1) : 0;
}
int main()
{
printf("%d %d", length("abcd"), length("abcdefgh"));
}
सब कुछ उम्मीद के मुताबिक काम करता है, प्रोग्राम 4 प्रिंट करता है और 8. असेंबली द्वारा उत्पन्न असेंबली कोड दिखाता है कि परिणाम संकलन समय पर गणना किए जाते हैं:
0x100000f5e: leaq 0x35(%rip), %rdi ; "%d %d"
0x100000f65: movl $0x4, %esi
0x100000f6a: movl $0x8, %edx
0x100000f6f: xorl %eax, %eax
0x100000f71: callq 0x100000f7a ; symbol stub for: printf
मेरा प्रश्न: क्या यह मानक द्वारा गारंटी है कि length
फ़ंक्शन का संकलन समय का मूल्यांकन किया जाएगा?
अगर यह सच है समय संकलन के लिए स्ट्रिंग स्ट्रिंग शाब्दिक अभिकलन सिर्फ मेरे लिए खोला गया है ... उदाहरण के लिए मैं संकलन समय पर हैश की गणना कर सकता हूं और कई और ...