Che succede con static_cast con più argomenti?
-
09-09-2019 - |
Domanda
Qualcuno può dirmi che cosa questo cast ha per effetto (oltre impostazione happyNumber al 1337), se non del tutto, e se non ha altri effetti, come mai posso scrivere codice come questo ??? Si tratta di un bug del compilatore, o qualche "caratteristica nascosto" del C ++?
int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);
Sono rimasto sorpreso questo sarebbe compilare a tutti. L'ho trovato attraverso un bug in cui per sbaglio ho impostato il secondo parametro a qualcosa che doveva andare in una chiamata di funzione dell'espressione di essere lanciato. Ciò ha provocato un brutto bug in cui l'oggetto è stato lanciato dal secondo parametro, chiamando la funzione con un solo argomento. E 'stato compilato ... E non ha inizialmente un boom ...
Sto usando Microsoft Visual C ++ 2008.
Soluzione
Cast statico accetta un argomento, ma il suo argomento è un'espressione, e le espressioni possono includere la virgola operatore . Comma viene utilizzato in situazioni in cui si desidera valutare due o più espressioni in una sola volta per i loro effetti collaterali, per esempio:.
int i, j;
for (i=0, j=0; i < 10; i++,j++) {
// do stuff
}
E 'un po' utile perché senza di essa si potrebbe valutare una sola espressione ciascuno per l'inizializzazione, la condizione, e continuare le parti del ciclo for (o qualsiasi altro luogo si prevede un'espressione). E di solito non fanno per il codice più chiaro, però, e la semantica sono dispari. Come si osserva, una sequenza separati da virgole restituisce il valore della sua ultima espressione.