Je doute de la manière dont C++ lance les types lorsqu'il doit effectuer des calculs.comportement inattendu lors de la diffusion
Le code ci-dessous tel qu'il est (c'est-à-dire avec seulement la conversion en int sans cast en double) fonctionne et se construit sans problème. Si je définis ENABLE_DOUBLE_CAST
ne construit pas et se plaint environ operator*
. Est-ce que tu sais pourquoi?
Les doutes que j'ai sont 2:
- pourquoi sans que l'opérateur jeté à doubler, il est utilisé celui int dans une multiplication entre le double. Est-ce à cause de la distribution implicite?
- pourquoi avec le cast pour double activer (en ajoutant plus de clarté à la syntaxe) qui n'est pas pris en compte?
Merci
AFG
class CA{
int _m;
public:
CA(int a, int b){
_m=a*b;
}
operator int(){
std::cout<< "(CA int cast)" ;
return _m;
}
#ifdef ENABLE_DOUBLE_CAST
operator double(){
std::cout << "(CA double cat)";
return 2.3 * _m;
}
#endif
};
int main(int argc, const char** argv){
CA obj_2(10,20);
double total_1 = 100.0 * obj_2;
double total_2 = obj_2 * 100.0;
return 0;
}
Vous avez entendu parler de la conversion définie par l'utilisateur, mais pas définie par l'utilisateur 'operator *'? Vous devez définir ce dernier. En fait, vous devez définir deux versions de 'operator *'. – Nawaz