Posté par freem .
En réponse au journal Le bon sens et le C++.
Évalué à 4.
Dernière modification le 20 novembre 2024 à 07:58.
Entièrement d'accord, je serais tellement plus serein si le compilo pouvais détecter toutes les conversions implicites... mais ce n'est pas le cas.
Cela dis, il est déjà possible d'en activer un petit paquet. De mémoire, en vrac et non exhaustif:
comparaison d'entiers signés vs non-signés;
conversion entre float et double;
conversion vers un type plus petit;
Ensuite on peut prendre la bonne habitude d'utiliser explicit dans les constructeurs, opérateurs d'affection et opérateurs de conversion. Je suis récemment tombé sur un bug a cause d'un ... qui avais ajouté un opérateur de conversion implicite vers bool à une classe qui interagit principalement avec des pointers... J'étais en colère quand j'ai fini par comprendre d'où venait le problème.
Par pitié, si vous êtes profs ou même pas en fait, s'il vous plaît, insistez auprès des jeunes qu'il *ne faut pas définir de bool foo::operator() const { return bar; }: ça ne peut que mal se passer!
C'est pas la panacée, certes, mais c'est déjà bien. Et quand un dev C critique cet aspect mais oublie manifestement de mentionner que les cast en C servent quasi à rien, que le C encore récemment permettait des trucs du style:
int fubar()
{
return 0;
}
int main()
{
return fubar( 1, 2 ,3 );
}
je me demande quoi rétorquer. Mentionner la mauvaise foi, au bout d'un moment, ça fait un peu réchauffé, même si c'est la réalité.
[^] # Re: Beurk les conversions implicites
Posté par freem . En réponse au journal Le bon sens et le C++. Évalué à 4. Dernière modification le 20 novembre 2024 à 07:58.
Entièrement d'accord, je serais tellement plus serein si le compilo pouvais détecter toutes les conversions implicites... mais ce n'est pas le cas.
Cela dis, il est déjà possible d'en activer un petit paquet. De mémoire, en vrac et non exhaustif:
Ensuite on peut prendre la bonne habitude d'utiliser
explicitdans les constructeurs, opérateurs d'affection et opérateurs de conversion. Je suis récemment tombé sur un bug a cause d'un ... qui avais ajouté un opérateur de conversion implicite vers bool à une classe qui interagit principalement avec des pointers... J'étais en colère quand j'ai fini par comprendre d'où venait le problème.Par pitié, si vous êtes profs ou même pas en fait, s'il vous plaît, insistez auprès des jeunes qu'il *ne faut pas définir de
bool foo::operator() const { return bar; }: ça ne peut que mal se passer!C'est pas la panacée, certes, mais c'est déjà bien. Et quand un dev C critique cet aspect mais oublie manifestement de mentionner que les cast en C servent quasi à rien, que le C encore récemment permettait des trucs du style:
je me demande quoi rétorquer. Mentionner la mauvaise foi, au bout d'un moment, ça fait un peu réchauffé, même si c'est la réalité.