L'argomento sopra mi ha fatto fare alcuni esperimenti con boole intin ifcondizioni. Quindi solo per curiosità ho scritto questo programma:
int f(int i)
{
if ( i ) return 99; //if(int)
else return -99;
}
int g(bool b)
{
if ( b ) return 99; //if(bool)
else return -99;
}
int main(){}
g++ intbool.cpp -S genera codice asm per ciascuna funzione come segue:
codice asm per
f(int)__Z1fi: LFB0: pushl %ebp LCFI0: movl %esp, %ebp LCFI1: cmpl $0, 8(%ebp) je L2 movl $99, %eax jmp L3 L2: movl $-99, %eax L3: leave LCFI2: retcodice asm per
g(bool)__Z1gb: LFB1: pushl %ebp LCFI3: movl %esp, %ebp LCFI4: subl $4, %esp LCFI5: movl 8(%ebp), %eax movb %al, -4(%ebp) cmpb $0, -4(%ebp) je L5 movl $99, %eax jmp L6 L5: movl $-99, %eax L6: leave LCFI6: ret
Sorprendentemente, g(bool)genera più asmistruzioni! Significa che if(bool)è un po 'più lento di if(int)? Pensavo che boolfosse progettato specialmente per essere utilizzato in affermazioni condizionali come if, quindi mi aspettavo g(bool)di generare meno istruzioni asm, rendendole così g(bool)più efficienti e veloci.
MODIFICARE:
Al momento non sto utilizzando alcun flag di ottimizzazione. Ma anche in assenza di esso, perché genera più asm g(bool)è una domanda per la quale cerco una risposta ragionevole. Dovrei anche dirti che il -O2flag di ottimizzazione genera esattamente lo stesso asm. Ma non è questa la domanda. La domanda è ciò che ho chiesto.
g(bool)è una domanda per la quale cerco una risposta ragionevole.