Il y a une discussion sur Microsoft Connect (http://stackoverflow.com/questions/206564/what-is-the-performance-implication-of-converting-to-bool-in-c). L'exemple donné à Microsoft:
$ cat -n t.cpp && cl -c -W3 -O2 -nologo -Fa t.cpp
1 bool f1 (int i)
2 {
3 return i & 2;
4 }
5
6 bool f2 (int i)
7 {
8 const bool b = i & 2;
9 return b;
10 }
11
12 bool f3 (int i)
13 {
14 const bool b = 0 != (i & 2);
15 return b;
16 }
t.cpp
t.cpp(3) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
t.cpp(8) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
Et la réponse de Microsoft (par le développeur responsable de la mise en garde) est:
Cet avertissement est étonnamment utile, et a trouvé un bug dans mon code hier. Je pense que Martin est de prendre "avertissement sur les performances" hors contexte.
Il n'est pas sur le code généré, c'est de savoir si ou non le programmeur a fait part de l'intention de modifier une valeur de type int bool. Il y a une pénalité pour cela, et l'utilisateur a le choix de l'utilisation de "int" au lieu de "bool" systématiquement (ou, plus probablement, vice-versa) pour éviter le "boolifying" codegen. L'avertissement est supprimée dans le troisième cas ci-dessous, parce qu'il est clairement fait part de son intention d'accepter l'int->bool transition.
C'est un vieux avertissement, et peut avoir dépassé son but, mais c'est à se comporter comme ici conçu
Donc, fondamentalement, le développeur MS semble dire que si vous voulez "cast" un int
de bool
vous devriez plus correctement le faire en utilisant "return this->parentNode != 0
" au lieu d'une façon implicite ou explicite de fonte.
Personnellement, je serais intéressé d'en savoir plus sur ce genre de bugs de l'avertissement découvre. Je pense que cet avertissement n'aurait pas beaucoup de valeur.