Rozważ następujący przykład:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Wygenerowany kod zestawu dla vector::empty
(według clang, z optymalizacjami):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Dlaczego przydziela miejsce na stosie? W ogóle nie jest używany. push
I pop
może być pominięty. Zoptymalizowane kompilacje MSVC i gcc również używają przestrzeni stosu dla tej funkcji (patrz na godbolt ), więc musi być jakiś powód.
vector::size()
nie jest zdefiniowany w tym przykładzie, aby zasymulować, że nie jest wstawiony.
vector::size()
nie ma znaczenia dla przydzielania lub nieprzydzielania ramki stosu vector::empty()
. W empty()
to właśnie nazywa, cokolwiek to jest.
this
parametr?