重複の可能性:
暗黙的VS明示的変換
「暗黙の変換」と「明示的な変換」の違いは何ですか?JavaとC++の違いは違いますか?
重複の可能性:
暗黙的VS明示的変換
「暗黙の変換」と「明示的な変換」の違いは何ですか?JavaとC++の違いは違いますか?
明示的な変換とは、構文を使用してプログラムに変換を行うように指示することです。例(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 ++仕様が矛盾した意味でそれらを使用しているとは想像できません。)
あなたはキャスティングを意味しますか?暗黙的とは、タイプから継承するタイプのインスタンス、たとえばBを渡すことを意味します。たとえば、AをAとして渡します。
例えば:
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