C++ テンプレートのメタプログラミングを表示するウィキペディアの例を次に示します。
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}
特殊化が <0> になるまで、N のテンプレート パラメーター値を使用して Factorial の型を再帰的に作成する仕組みを理解しています。これにより、コンパイラーはチェーンの値を解決できます。
私の質問は次のとおりです。これはコンパイル後にどのように見えるでしょうか? コンパイラは文字通り、次のようなものを生成するだけになりますか?
int x = 24;
int y = 1;
または、結果はより複雑になりますか? 基本的に次の結果になるかどうか疑問に思っているので、私は尋ねています:
Factorial<4>::value
実行可能コードで定数 (24) に置き換えられているか、それよりも複雑な場合。これが完成したプログラムの効率にどのように役立つかを理解しようとしているだけなので、これは大いに役立ちます:)