Perhatikan contoh berikut:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Kode perakitan yang dihasilkan untuk vector::empty
(oleh dentang, dengan optimisasi):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Mengapa ia mengalokasikan ruang stack? Itu tidak digunakan sama sekali. The push
dan pop
bisa dihilangkan. Membangun MSVC dan gcc yang dioptimalkan juga menggunakan ruang stack untuk fungsi ini (lihat di godbolt ), jadi pasti ada alasannya.
@ Bob: Tidak. Kenapa saya harus?
—
Dr. Gut
vector::size()
tidak didefinisikan dalam contoh untuk mensimulasi bahwa itu tidak diuraikan.
Jadi, bagaimana mungkin kompiler mengoptimalkan sesuatu yang tidak diketahuinya?
—
Bob__
@ Bob: Saya pikir, mengetahui implementasi
—
Dr. Gut
vector::size()
tidak relevan untuk mengalokasikan atau tidak mengalokasikan frame stack untuk vector::empty()
. Di empty()
dalamnya hanya disebut, apa pun itu.
Nah, Anda memanggil fungsi yang mengembalikan sesuatu, Anda perlu ruang untuk itu (jika Anda tidak tahu yang lebih baik).
—
Bob__
this
parameter implisit ?