Considera il seguente esempio:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Il codice assembly generato per vector::empty
(da clang, con ottimizzazioni):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Perché alloca lo spazio dello stack? Non è affatto usato. L' push
e pop
potrebbe essere omesso. Le build ottimizzate di MSVC e gcc usano anche lo spazio dello stack per questa funzione (vedi su godbolt ), quindi ci deve essere un motivo.
vector::size()
non è definito nell'esempio per simulare che non è inline.
vector::size()
non sia rilevante per allocare o non allocare un frame di stack per vector::empty()
. In empty()
esso è appena chiamato, qualunque cosa sia.
this
parametro implicito ?