1

こんにちは皆さん、C++ のテンプレートについて質問があります。

私が疑問に思っていることを、例を挙げて説明したいと思います。max() をテンプレート関数にします。

template <typename Type> 
Type max(Type tX, Type tY)
{
    return (tX > tY) ? tX : tY;
}

ここで、メインでこの max を呼び出すと、呼び出しごとにコンパイラが関数を生成します

テンプレートタイプを実際のタイプに置き換えますか?

つまり;

int main()
{
int result1,result2;
float result3;

result1=max(3,5);
result2=max(10,12);
result3=max(4.5,12.2);
return 0;
}

ここで max は 3 回コピーされ、そのパラメーターまたは何か他のものに置き換えられますか? 私を助けることができる人はいますか?前もって感謝します。

4

1 に答える 1

0

私の理解では、コンパイラは通常、コンパイル単位ごとにデータ型ごとに 1 回テンプレートを解決します。そしてリンカは、コードの肥大化を止める巧妙な方法を実行します。つまり、すべてのコンパイル単位で同じ関数の複数のコピーが 1 つに凝縮されます。初期の Microsoft C++ リンカは、そのようなことを気にせず、生成されたコードが大きくなりました。

あなたの例では、2 つの関数が生成されることが期待されます。1 つは 2 つの引数を持ち、もう 1 つは 4 つの引数を持ちます。

ああ、最後のケースでは、4 つの整数型ではなく 2 つの浮動小数点パラメーターを持つように投稿を編集したようです。

于 2013-05-29T11:47:38.250 に答える