8
votes

C et C ++: différence entre le casting et la conversion

Y a-t-il une différence entre la ligne 2 et la ligne 3 dans le code suivant? Qu'est-ce que le compilateur dans chaque cas ? xxx

en général, quelle est la différence entre la coulée et la conversion (en C et C ++)?


4 commentaires

Référez-vous Ce et il devrait clarifier votre doute


.. Cette discussion est en C # Contexte..maybe en C et C ++, la coulée et la conversion diffèrent légèrement des autres langues ...


Désolé, mis à jour mon message


.. Merci pour la mise à jour.. :-)


4 Réponses :


2
votes

Les deux sont des conversions / moulages, à la ligne 2, il est simplement implicite, tandis que sur la ligne 3, il est explicite, il n'y a pas de différence fonctionnelle.


0 commentaires

5
votes

Il n'y a pas de différence dans l'effet final.

a casting est d'utiliser une notation explicite, générale et intégrée à la conversion.

Bien que dans certains cas, nous disons "élever" lorsque nous entendons une conversion implicite de dérivée * à la base * (ou de dérivée et à base de base et).

Et dans certains cas, on définit une nouvelle notation de moulage.

La définition ci-dessus de la terminologie n'est qu'une définition opérationnelle, c'est-à-dire que ce n'est pas une définition où vous pouvez raisonner que quelque chose est un casting. Les moulages sont juste ceux qui sont définis comme des moulages. :-) Par exemple, bool (x) est une coulée, tandis que !! x , qui fait la même notation et une notation explicite, n'est pas une distribution.

en C ++ Vous pouvez et de préférence utiliser les cases nommées static_cast , const_cast , dynamic_cast et REINIERPRET_CAST , avec une éventuelle exception pour la coulée explicite des types intégrés arithmétiques. Une des raisons est qu'un style c style (autre *) p ou dans la notation spécifique au C ++ AutresPtr (p) , peut faire différentes choses en fonction du contexte, et notamment , lorsque le code est légèrement modifié, la signification d'une distribution de style C peut changer. Une autre raison est qu'il est difficile de rechercher des moulages de style C.

Cela dit, le meilleur est d'éviter les moulages au degré possible.

acclamations et hth.,


0 commentaires

1
votes

Le résultat final est le même (c'est-à-dire que votre intégration est valorisée à 65 ans).

Maintenant, la ligne 3 permet au lecteur (ou qui peut avoir à maintenir le code) - pour repérer le CAST C; qui est dans mon humble opinion un plus.

Si ce code fait partie d'une application C ++, il serait encore préférable d'utiliser static_cast pendant au moins 2 raisons:

  1. Il est beaucoup plus facile de trouver static_cast dans votre application qu'un style C; En plus d'être plus clair pour comprendre votre intention envers quelqu'un d'autre lisant le code
  2. La syntaxe C ++ Cast est longue, ce qui aide à limiter la coulée des moments (la coulée est toujours parfois nécessaire bien sûr :). Si vous développez du caractère aux choses, faire la conversion entre la chaîne et les chiffres, vous devrez utiliser quelque chose comme des flux par exemple

    J'espère que cela aide


0 commentaires

0
votes

Une conversion est le processus em> de convertir des données d'un type à un autre. Un casting est un opérateur em> qui provoque une conversion (sauf dans le cas où les types correspondent déjà).

in c, la plupart des cases sont inutiles em> et considérées mauvaises Style em>. En C ++, des moulages de style C sont considérés par beaucoup comme un style mauvais; C ++ a un système de distribution plus sûr, mais comme je n'utilise pas C ++, je laisserai les autres à expliquer. P>

Au fait, dans votre exemple: P>

char ch = (char)'A';


0 commentaires