web-dev-qa-db-fra.com

Différence entre conversion implicite et conversion explicite

Dupliquer possible:
Conversion VS explicite implicite

Quelle est la différence entre "conversion implicite" et "conversion explicite"? La différence est-elle différente en Java et en C++?

10
saplingPro

Une conversion explicite consiste à utiliser une syntaxe pour tell le programme pour effectuer une conversion. Par exemple (en Java):

int i = 999999999;
byte b = (byte) i;  // The type cast causes an explicit conversion
b = i;              // Compilation error!!  No implicit conversion here.

Une conversion implicite est l'endroit où la conversion se produit sans aucune syntaxe. Par exemple (en Java):

int i = 999999999;
float f = i;    // An implicit conversion is performed here

Il convient de noter que (en Java), les conversions impliquant des types primitifs impliquent généralement un changement de représentation, ce qui peut entraîner une perte de précision ou une perte d'informations. En revanche, les conversions impliquant des types de référence (uniquement) ne modifient pas la représentation fondamentale.


La différence est-elle différente en Java et en C++?

Je ne l'imagine pas. Évidemment, les conversions disponibles seront différentes, mais la distinction entre "implicite" et "explicite" sera la même. (Remarque: je ne suis pas un expert du langage C++ ... mais ces mots ont un sens naturel en anglais et je ne peux pas imaginer que les spécifications C++ les utilisent de manière contradictoire.)

22
Stephen C

You Mean Casting? Implicite signifie que vous transmettez une instance de type, disons B, qui hérite d’un type, disons A comme A.

Par exemple:

Class A;
Class B extends A;

function f(A a) {...};

main() {
  B b = new B;
  f(b); // <-- b will be implicitly upcast to A.
}

Il existe en fait d'autres types de transtypages implicites - entre primitives, à l'aide de constructeurs par défaut. Vous devrez être plus précis avec votre question.

implicite avec le constructeur par défaut:

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.
}
3
Ben

Casting est une conversion de type explicite, spécifiée dans le code et soumise à très peu de règles au moment de la compilation. Les moulages peuvent être dangereux; ils peuvent échouer au moment de l'exécution ou perdre des informations.
La conversion implicite est une conversion de type ou une conversion de données primitives effectuée par le compilateur pour se conformer aux règles de promotion des données ou pour correspondre à la signature d'une méthode. En Java, seules les conversions implicites sécurisées sont effectuées: diffusions en amont et promotion. \

De plus, je vous conseillerais de lire sur la couverture implicite C++: http://blogs.msdn.com/b/oldnewthing/archive/2006/05/24/605974.aspx

0
Baz1nga