Question

Quelqu'un peut-il me dire ce que cette distribution a pour effet (en plus de la mise en happyNumber à 1337), le cas échéant du tout, et si elle n'a pas d'autre effet, comment se fait-il que je peux écrire un code comme celui-ci ??? Est-ce un bug du compilateur, ou une « fonction cachée » de C ++?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

J'ai été surpris ce compilerait du tout. Je l'ai trouvé par un bug où je mis accidentellement le deuxième paramètre à quelque chose qui était censé aller dans un appel de fonction de l'expression en cours de coulée. Il en est résulté un vilain bug où l'objet a été moulé à partir du second paramètre, appelant la fonction avec un seul argument. Il a compilé ... Et n'a pas d'abord un boom ...

J'utilise Microsoft Visual C ++ 2008.

Était-ce utile?

La solution

Casting statique prend un argument, mais son argument est une expression, et les expressions peuvent inclure le opérateur virgule . Comma est utilisé dans des situations où vous voulez évaluer deux ou plusieurs expressions à la fois pour leurs effets secondaires, par exemple:.

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

Il est un peu utile, car sans elle, vous ne pouvez évaluer une expression chacun pour l'initialiseur, l'état, et continuer parties de la boucle (ou tout autre lieu d'expression est attendue). Il ne fait généralement pas le code le plus clair, cependant, et la sémantique sont impairs. Comme vous observé, une séquence séparée par des virgules est évaluée à la valeur de la dernière expression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top