Betrachten Sie das folgende Beispiel:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Der generierte Assemblycode für vector::empty
(durch Klirren, mit Optimierungen):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Warum wird Stapelspeicher zugewiesen? Es wird überhaupt nicht verwendet. Das push
und pop
könnte weggelassen werden. Optimierte Builds von MSVC und gcc verwenden für diese Funktion auch Stapelspeicher (siehe Godbolt ), daher muss es einen Grund geben.
vector::size()
wird im Beispiel nicht definiert, um zu simulieren, dass es nicht inline ist.
vector::size()
nicht relevant für das Zuweisen oder Nichtzuweisen eines Stapelrahmens für ist vector::empty()
. Darin empty()
heißt es einfach, was auch immer es ist.
this
Parameter berücksichtigt ?