Provando, sono venuto a sapere che è necessario mettere le parentesi attorno a un operatore condizionale in un'istruzione cout. Ecco un piccolo esempio:Operatore condizionale utilizzato nella dichiarazione cout
#include <iostream>
int main() {
int a = 5;
float b = (a!=0) ? 42.0f : -42.0f;
// works fine
std::cout << b << std::endl;
// works also fine
std::cout << ((a != 0) ? 42.0f : -42.0f) << std::endl;
// does not work fine
std::cout << (a != 0) ? 42.0f : -42.0f;
return 0;
}
L'output è:
42
42
1
Perché questa fascia necessario? Il tipo risultante dell'operatore condizionale è noto in entrambi i casi, non è vero?
Solo una nota, 'cout <<' restituisce 'cout', non qualcosa sullo stato valido. failbit/badbit verrà impostato, ma '(std :: cout << (a! = 0))' restituisce sempre un riferimento a 'std :: cout'. '-42.0f' non dovrebbe mai essere restituito, dato che quel riferimento dovrebbe sempre booleano valutare su true. –
grazie, non ho nemmeno pensato alle precedenze – m47h
@SamDeHaan: sì. Scusate, forse ero un po 'sciatto nella mia spiegazione. L'espressione "cout << x" restituisce cout. Ma affinché l'espressione "cout? A: b" sia valutata, cout deve prima essere gettato su un valore che è un operando valido per l'operatore? :. In questo caso, è (operator void *) che fa il lavoro. Questo operatore restituisce NULL se è impostato un flag di errore. Vedi: –