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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top