0

C++ テンプレートまたは Java Generics のいずれかを使用し、残りの言語の問題 (実行時間など) を無視してソリューションを実装することを選択する必要がある場合、生成されるコードのサイズが重要な場合、どちらが優先されますか?

Java Generics では、コンパイル後に型パラメーターがスローされ、メタデータに格納されないことを読みましたが、これはプログラムのサイズを小さくするかどうかにつながりますか?

4

1 に答える 1

5

まず、これらは似ていないことを理解する必要があります。実際、それらはほぼ正反対です。

  • C++ テンプレートは、コンパイル時およびリンク時のコード生成によって、新しい型を生成します。
  • Java Generics は、コンパイル時に型代数を介して既存の型を制限します。

これらの 2 つの事実からすべてが導かれます。Java Generics は、スペースまたは時間のコストをゼロにします。C++ テンプレートは両方のコストを追加します。巧妙なインライン化とテンプレート化されていない基本クラスの使用 (古いvoid *トリック) により、C++ スペースのコストを最小限に抑えることができ、場合によってはそれをなくすことさえできますが、C++ コンパイラが実際にどのようにインライン化を行うかについて十分な注意と予測が必要です。

于 2013-05-24T08:57:27.207 に答える