Secondo la descrizione di operatore condizionale in Visual C++ (5.16 condizionale operatore)
6 Ivalue-to-rvalue (4.1), da matrice a pointer (4.2), e FUNCTION- to-pointer (4.3) le conversioni standard vengono eseguite sul secondo e terzo operando . Dopo tali conversioni, deve essere conservato uno dei seguenti valori:
- Il secondo e il terzo operando hanno un tipo aritmetico o di enumerazione; le normali conversioni aritmetiche vengono eseguite per portarle a un tipo comune e il risultato è di quel tipo.
E (5) espressioni
10 molti operatori binari che prevedono operandi di operazioni aritmetiche o tipo censimento causa conversioni e tipi di risultato resa in un modo simile . Lo scopo è quello di fornire un tipo comune, che è anche il tipo di il risultato. Questo modello è chiamato usuali conversioni aritmetiche, che sono definite come segue:
- Altrimenti, se uno degli operandi è doppia, l'altra è convertito raddoppiare.
Nelle entrambi gli usi dell'operatore condizionale uno degli operandi è fluttuante letterale avente tipo double - 1.0
(C++ standard: Il tipo di una letterale galleggiante è doppia se non espressamente specificato da un suffisso.)
auto x = true ? 1 : 1.0;
auto y = false ? 1 : 1.0;
Così l'altro operando anche saranno convertiti al tipo double e il risultato delle espressioni è di tipo double.
fonte
2015-03-05 20:05:05
'modello struct typeof; template struct typeof >;' –
0x499602D2
È possibile utilizzare [typeid] (http://coliru.stacked-crooked.com/a/a4158dbd29785207) per questo (anche io think boost ha la sua stessa cosa tipo idolo) – Borgleader
È il tipo comune di 'int' e' double', quindi 'double'. – chris