2015-03-07 2 views
0

J'ai déclaré ce qui suit dans mon projet:fonte statique de ENUM bool, avertissement de performance du compilateur

enum class OType : bool { Dynamic=true, Static=false }; 
OType getotype(); 

J'utilise la fonction suivante:

double ComputeO(double K,bool type) 

Je l'appeler de cette façon:

ComputeO(some double, static_cast<bool>(getotype()))

Pour cette static_cast Je reçois une belle: 012 Je ne sais pas comment me débarrasser de cela, je spécifie le casting explicitement ne devrait-il pas être suffisant?

Note: J'utilise VC11 (Visual Studio 2012)

Thks.

+0

Pourquoi ne vous prenez pas 'OType' au lieu de' 'bool' dans ComputeO'? Cela empêcherait le code confus comme 'ComputeO (certains doubles, faux); // qu'est-ce que le faux veut dire? –

+0

Oui, malheureusement, je ne peux pas changer ComputeO. – user2164703

Répondre

2

Voir https://msdn.microsoft.com/en-us/library/b6801kcy.aspx, qui décrit l'avertissement. En particulier, il est dit:

La conversion de l'expression en type bool ne désactivera pas l'avertissement qui est voulu.

Il suffit de réécrire votre appel comme ceci:

enum class OType : bool { Dynamic=true, Static=false }; 
OType getotype(); 
double ComputeO(double K,bool type); 

int main() 
{ 
    ComputeO(1.0, getotype() == OType::Dynamic); 
}