1

私は C++ から来て、Java を少し知っていますが、Java について完全に理解していないことが 1 つあります。それはキャストです。C++ では、通常のキャストと static_cast と dynamic_castがあります。Java では、プリミティブ型とオブジェクト型の間のキャスト (ボックス化とアンボックス化として知られています)、プリミティブ型の間のキャスト、Class関数を使用したキャスト、そして時には未チェックのキャストを実行します。Java のキャスト システムから C++ のキャスト システムへの直接マッピングはありますか? それらは同等ですか?または、片側にユニークなものはありますか?

4

2 に答える 2

2

C++ の知識があれば、Java オブジェクト モデルはかなり簡単に説明できます。クラス型の Java 変数は、対応する型の動的に作成されたオブジェクトへの参照です。初期化された Java 変数T x = new T();は、C++ ポインターに密接に対応します。T * px = new T;

Java では、すべてのクラス型がポリモーフィック型から継承Objectされるため、すべてのポインタを RTTI に使用できます。Java クラス型変数のすべてのキャストdynamic_castは、C++ のものです。したがって、Javaは C++ に(S) x対応しdynamic_cast<S *>(px)、null の結果が動的な型が関連していないことを示すのと同じ失敗モードを備えています。

他のすべての C++ ポインター キャストは安全ではなく、Java には同等のものはありません。Java に整数から浮動小数点へのようなスカラー変換があるかどうかはわかりません。もしそうなら、それらは C++ 変換に密接に対応します。

ボクシングとプリミティブ型は、かなり別の無関係な問題です。C++ でそのようなものが必要な場合は、何らかのtemplate <typename T> struct Box変換T演算子を使用する必要があります。

于 2013-06-22T23:42:39.287 に答える