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' pushe poppotrebbe 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.
thisparametro implicito ?