[C++] conversion de type avec visual C++

conversion de type avec visual C++ [C++] - C++ - Programmation

Marsh Posté le 28-01-2003 à 20:55:50    

hello
 
j'arrive pas à arrondir un double en int avec visual c++
 
si qqun peut me tuyauter, ce serait cool
 
merci bien :jap:

Reply

Marsh Posté le 28-01-2003 à 20:55:50   

Reply

Marsh Posté le 28-01-2003 à 20:59:28    

trueslash a écrit :

hello
 
j'arrive pas à arrondir un double en int avec visual c++
 
si qqun peut me tuyauter, ce serait cool
 
merci bien :jap:


 
int a = static_cast <int> (dbl);

Reply

Marsh Posté le 28-01-2003 à 21:00:27    

bien :jap:

Reply

Marsh Posté le 28-01-2003 à 21:13:31    

merchi bcp, je teste ça de suite :)

Reply

Marsh Posté le 29-01-2003 à 08:06:08    

J'ai une question sur des types atomique comme int et double y a vraiment un intéret à faire un static_cast plutôt qu'un bon vieu cast (i.e. (int)monDouble)?  
 
PS: C une vrai question que je me pose, c pas pour faire chier :D


---------------
Le Tyran
Reply

Marsh Posté le 29-01-2003 à 08:16:58    

LetoII a écrit :

J'ai une question sur des types atomique comme int et double y a vraiment un intéret à faire un static_cast plutôt qu'un bon vieu cast (i.e. (int)monDouble)?  
 
PS: C une vrai question que je me pose, c pas pour faire chier :D


Le C++ a conservé le bon vieux cast à la C. mais en C++, il peut être utilisé la où tu fous un static_cast, un reinterpret_cast ou un const_cast (mais pas un dynamic_cast). Par contre l'avantage est  que ces opérateurs permettent de dire explicitement le type de conversion que tu veux et au niveau relecture de code, c + simple. c clair qu'au niveau du code généré ca change pas gd chose, ms c surtout (uniquement ?) pour la maintenance de code

Reply

Marsh Posté le 29-01-2003 à 08:17:11    

LetoII a écrit :

J'ai une question sur des types atomique comme int et double y a vraiment un intéret à faire un static_cast plutôt qu'un bon vieu cast (i.e. (int)monDouble)?  
 
PS: C une vrai question que je me pose, c pas pour faire chier :D


L'intérêt à mon sens, c'est d'être explicite et donc mieux compris (par les autres autant que par le compilo).


---------------
Le site de ma maman
Reply

Marsh Posté le 29-01-2003 à 08:21:29    

gloop a écrit :


Le C++ a conservé le bon vieux cast à la C. mais en C++, il peut être utilisé la où tu fous un static_cast, un reinterpret_cast ou un const_cast (mais pas un dynamic_cast). Par contre l'avantage est  que ces opérateurs permettent de dire explicitement le type de conversion que tu veux et au niveau relecture de code, c + simple. c clair qu'au niveau du code généré ca change pas gd chose, ms c surtout (uniquement ?) pour la maintenance de code


 
Ha donc vous vous trouvez que static_cast<T>(var) est plus explicite que (T)var... mouai pkoi pas.


---------------
Le Tyran
Reply

Marsh Posté le 29-01-2003 à 08:23:50    

LetoII a écrit :


 
Ha donc vous vous trouvez que static_cast<T>(var) est plus explicite que (T)var... mouai pkoi pas.


Ben oui. C'est plus explicite, déjà parce que c'est écrit noir sur blanc, ou vert sur noir si tu as un 8088 à la maison. [:ddr555]


---------------
Le site de ma maman
Reply

Marsh Posté le 29-01-2003 à 08:24:35    

Cherrytree a écrit :


Ben oui. C'est plus explicite, déjà parce que c'est écrit noir sur blanc, ou vert sur noir si tu as un 8088 à la maison. [:ddr555]  


 
 :lol:


---------------
Le Tyran
Reply

Marsh Posté le 29-01-2003 à 08:24:35   

Reply

Marsh Posté le 29-01-2003 à 08:25:55    

LetoII a écrit :


 
Ha donc vous vous trouvez que static_cast<T>(var) est plus explicite que (T)var... mouai pkoi pas.


oui comme je l'ai dit le cast C peut faire plusieurs types de cast:
static_cast pour les casts entre types de mêmes familles
const_cast pour jarter le qualifier const
reinterpret_cast pour les types incompatibles entre eux
 
Avec ces opérateurs C++ tu explicites le type de cast que tu codes

Reply

Marsh Posté le 29-01-2003 à 08:41:20    

gloop a écrit :


oui comme je l'ai dit le cast C peut faire plusieurs types de cast:
static_cast pour les casts entre types de mêmes familles
const_cast pour jarter le qualifier const
reinterpret_cast pour les types incompatibles entre eux
 
Avec ces opérateurs C++ tu explicites le type de cast que tu codes


c'est surtout que tu peux etre averti a la compil ou à l'exécution de leur succes

Reply

Marsh Posté le 29-01-2003 à 22:17:04    

Pour ce genre de conversions j'écris int(x) plutot que (int)x, c'est quand même un peu plus conforme à l'appel d'un constructeur de "int" si il existait, à partir d'un double.

Reply

Marsh Posté le 29-01-2003 à 22:21:21    

entre types types de bases ou pour les classes qui implémentent int(), c'est sur qu'il vaut mieux int(objet). mais le static_cast est la façon générique

Reply

Marsh Posté le 29-01-2003 à 23:14:49    

les differences entre casts a surtout de l'importance
pour les pointeurs et les references.
 
lorsque tu fais  
double truc;
int machin = (int) truc;
ou
int machin = int ( truc ); // c'est strictement equivalent dans ce cas
 
tu sais tres bien que le programme ne va pas
tenter d'interpreter la memoire occupee
par un double comme un int mais qu'il va appliquer
la conversion par defaut dans ce cas.
 
de plus dans ce cas, la conversion pouvant avoir lieu implicitement, il n'est pas utile de preciser un operateur de conversion explicite. Par contre c'est souvent utile
lorsqu'il y a ambiguite sur la fonction, la methode, le constructeur ou l'operateur qui peut etre appele sur un argument et il vaut mieux faire le cast explicite pour s'assurer que l'on appelle la bonne operation (exemple: division sur des entiers..)
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 30-01-2003 à 06:11:54    

Le problème du cast C, c'est qu'il oblige le compilateur à se taire quelle que soit la débilité de l'erreur qu'on laisse passer.
Oui on peut l'utiliser.
Et puis le jour où on remanie son code, on l'oublie. Et là...
 
J'ai passé deux heures à chercher un truc que le compilateur aurait pu me signaler immédiatement si j'avais pas fait l'andouille :sweat: .
Ça m'a servi de leçon :jap: .
 
Question: Que fait un cast C appliqué à une adresse d'objet C++ ?
-Considère la représentation de l'adresse selon un nouveau type (cas du cast en type numérique).
-Change le type pointé par l'adresse (cas aucune parenté).
-Ajuste l'adresse sur la position du type de base (cas du cast en pointeur de type de base).
-Idem, par indirection (si le type de base est virtuel).
-Appelle un constructeur du type du cast (si il existe).
-Apelle un opérateur de conversion du type casté (si il existe).
-Apelle un opérateur de conversion du type renvoyé par une surcharge de l'opérateur d'adresse.
-Supprime ou ajoute const et/ou volatile.
 
Bon casse-tête... :pt1cable:
 
Les casts qui ne marchent pas:
-adresse en flottant.
-objet en type pas de base, ou sans cast/constructeur défini.
-vers tableau, fonction ou membre.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed