Mengapa sizeof disebut operator waktu kompilasi?
Karena, pada waktu kompilasi, kompiler menghitung ukuran ekspresi dan pengganti yang mengkompilasi nilai konstanta waktu.
Bukankah itu sebenarnya operator run-time?
Tidak. Anda bahkan dapat menggunakan sizeof
untuk mengevaluasi ukuran ekspresi yang tidak dapat Anda jalankan secara hukum (yaitu, yang akan menimbulkan Perilaku Tidak Terdefinisi), selama kompilator dapat mengetahui apa jenis ekspresi itu.
Juga, bahkan sebelum C ++ 11 constexpr
, Anda bisa menggunakan sizeof
ekspresi dengan cara yang tidak bisa Anda gunakan dengan ekspresi run-time.
Dan jika itu memang operator waktu kompilasi, bagaimana hal itu membantu dalam memproduksi kode portabel ...
Jenis dapat bervariasi dalam ukuran pada platform yang berbeda. Menggunakan sizeof
ekspresi alih-alih asumsi hard-coded berarti kode Anda tidak akan rusak ketika Anda mengkompilasi pada platform yang berbeda dan tipe Anda berubah ukuran.