bool accetta letterali int, letterali char, stringhe letterali - perché?

0

Programmazione: Pratiche e principi - Bjarne Stroustrup

Drill in Ch 5 - Errori

Vuole che correggiamo il codice:

boo c = "fool"<s;

Sulla correzione di boo a bool, questo è un confronto, quindi va bene. c sarà assegnato vero o falso. Ma se lo modifico in

bool c = "fool";

Inoltre valuta true. Poi ho provato "", "d", 235, e tutti valutano il vero. Non dovrebbe esserci un errore di tipo? Riduzione della conversione? Qualcosa? (Ho provato {} per verificare il restringimento delle conversioni.)

    
posta 07.07.2015 - 19:34
fonte

2 risposte

1

Come si può trovare qui , si verifica una conversione:

Prvalues of integral, floating-point, unscoped enumeration, pointer, and pointer-to-member types can be converted to prvalues of type bool.

The value zero (for integral, floating-point, and unscoped enumeration) and the null pointer and the null pointer-to-member values become false. All other values become true.

    
risposta data 07.07.2015 - 21:11
fonte
0

Penso che gli operatori booleani siano definiti per questi tipi per fornire la retrocompatibilità con il codice C. In C è legale utilizzare gli interi in if-s

int i = 1;
if (i) {
    // Will step into, unless i is set to 0
}

Dati questi operatori anche il codice "C-styled" sopra compila. Inoltre, in C ++:

if (/*Whatever you pass in, it's operator bool() is called here*/) {
    // And will step into if it's true
}

Leggi il capitolo chiamato "Sovraccarico dell'operatore".

    
risposta data 07.07.2015 - 20:30
fonte

Leggi altre domande sui tag