Tại sao sizeof được gọi là toán tử thời gian biên dịch?
Bởi vì, tại thời gian biên dịch, trình biên dịch sẽ tính toán kích thước của biểu thức và thay thế giá trị hằng số thời gian biên dịch.
Nó không thực sự là một nhà điều hành thời gian chạy?
Không. Bạn thậm chí có thể sử dụng sizeof
để đánh giá kích thước của biểu thức mà bạn không thể thực thi một cách hợp pháp (nghĩa là điều đó sẽ phát sinh Hành vi không xác định), miễn là trình biên dịch có thể tìm ra loại biểu thức là gì.
Ngoài ra, ngay cả trước C ++ 11 constexpr
, bạn có thể sử dụng sizeof
biểu thức theo cách bạn không thể sử dụng biểu thức thời gian chạy.
Và nếu nó thực sự là một toán tử thời gian biên dịch, thì nó giúp ích như thế nào trong việc tạo mã di động ...
Các loại có thể khác nhau về kích thước trên các nền tảng khác nhau. Sử dụng các sizeof
biểu thức thay vì các giả định được mã hóa cứng có nghĩa là mã của bạn sẽ không bị hỏng khi bạn biên dịch trên một nền tảng khác và các loại của bạn thay đổi kích thước.