可能性のある複製:
暗黙のVS明示的な変換
「暗黙の変換」と「明示的な変換」の違いは何ですか? JavaとC++では違いはありますか?
明示的な変換では、いくつかの構文を使用してtellプログラムに変換を行います。例(Javaの場合):
int i = 999999999;
byte b = (byte) i; // The type cast causes an explicit conversion
b = i; // Compilation error!! No implicit conversion here.
暗黙的な変換とは、構文なしで変換が行われる場所です。例(Javaの場合):
int i = 999999999;
float f = i; // An implicit conversion is performed here
プリミティブ型を含む(Javaでの)変換には、一般に表現の変更が含まれ、その結果、精度が失われたり、情報が失われたりする可能性があることに注意してください。対照的に、参照型のみを含む変換では、基本的な表現は変更されません。
JavaとC++では違いはありますか?
私はそうは思いません。利用可能な変換は明らかに異なりますが、「暗黙的」と「明示的」の違いは同じです。 (注:私はC++言語の専門家ではありませんが、これらの単語は英語で自然な意味を持ち、C++仕様が矛盾した意味で使用することは想像できません。)
あなたは鋳造を意味しますか?暗黙的には、タイプAをAとして継承するタイプBのインスタンスを渡すことを意味します。
例えば:
Class A;
Class B extends A;
function f(A a) {...};
main() {
B b = new B;
f(b); // <-- b will be implicitly upcast to A.
}
プリミティブ間では、デフォルトのコンストラクターを使用して、実際には他のタイプの暗黙的キャストがあります。質問はより具体的にする必要があります。
デフォルトのコンストラクタで暗黙的:
class A {
A (B b) { ... };
}
class B {};
main() {
B b = new B();
A a = b; // Implict conversion using the default constructor of A, C++ only.
}
キャストは明示的な型変換であり、コードで指定されており、コンパイル時にほとんど規則が適用されません。キャストは危険な場合があります。実行時に失敗したり、情報が失われたりする可能性があります。
暗黙的な変換は、データプロモーションルールに準拠するため、またはメソッドのシグネチャを照合するためにコンパイラーによって実行されるタイプ変換またはプリミティブデータ変換です。 Javaでは、安全な暗黙の変換のみが実行されます:アップキャストとプロモーション。\
また、C++の暗黙のカバーについて読むことをお勧めします: http://blogs.msdn.com/b/oldnewthing/archive/2006/05/24/605974.aspx