আমি সংকলনের সময় একটি স্ট্রিংয়ের আক্ষরিক দৈর্ঘ্য গণনা করার চেষ্টা করছি। এটি করতে আমি নিম্নলিখিত কোড ব্যবহার করছি:
#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
ফাংশনটি সংকলনের সময় মূল্যায়ন করা হবে?
যদি এটি সত্য হয় তবে সংকলন টাইম স্ট্রিং লিটারাল গণনাগুলির জন্য আমার জন্য সবেমাত্র দরজা খোলা হয়েছে ... উদাহরণস্বরূপ আমি সংকলনের সময় হ্যাশগুলি গণনা করতে পারি এবং আরও অনেক ...