[解決済み] C++とJavaの「汎用」型の違いは何ですか?
2022-04-24 15:53:11
質問
Javaにはジェネリックがあり、C++には非常に強力なプログラミングモデルがあります。
template
s.
それでは、C++とJavaのジェネリックの違いは何でしょうか?
どのように解決するのか?
両者には大きな違いがあります。C++では、ジェネリック型にクラスやインターフェイスを指定する必要はない。そのため、型付けが緩くなるという注意点はありますが、真にジェネリックな関数やクラスを作ることができます。
template <typename T> T sum(T a, T b) { return a + b; }
上記の方法は、同じ型の2つのオブジェクトを追加するもので、"+"演算子が利用できる任意の型Tに対して使用することができます。
Javaでは、渡されたオブジェクトのメソッドを呼び出す場合、型を指定する必要がある、みたいな。
<T extends Something> T sum(T a, T b) { return a.add ( b ); }
C++では、ジェネリック関数/クラスはヘッダでしか定義できません。なぜなら、コンパイラは(呼び出される)型ごとに異なる関数を生成してしまうからです。そのため、コンパイルが遅くなる。Javaではコンパイルに大きなペナルティはありませんが、Javaはquot;erasure"という技法を使用しており、実行時にジェネリックタイプが消去されるため、実行時にJavaは実際に...を呼び出しています。
Something sum(Something a, Something b) { return a.add ( b ); }
つまり、Javaのジェネリック・プログラミングは実際には役に立たず、新しいforeach構文に役立つちょっとした構文上の糖分でしかないのです。
EDITです。 上の有用性についての意見は、若い自分が書いたものです。Java のジェネリックスは、もちろん型安全性にも役立ちます。
関連
-
Java Exceptionが発生しました エラー解決
-
final, finally, finalizeの違いについて話してください。
-
SpringBootApplication を型解決できない。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Spring Boot による HTTPS アクセスの設定
-
をインスタンス化することができません。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] C++テンプレート関数定義の.CPPファイルへの格納
-
[解決済み】C#やJavaのGenericsと...C++のTemplatesの違いは?[終了しました]