Tôi biết rằng sizeof
là một phép tính thời gian biên dịch, nhưng điều này có vẻ lạ đối với tôi: Trình biên dịch có thể lấy một tên kiểu hoặc một biểu thức (từ đó nó loại trừ loại). Nhưng làm thế nào để bạn xác định một loại trong một lớp học? Có vẻ như cách duy nhất là để vượt qua một biểu hiện, mà có vẻ khá clunky.Tại sao các thành viên cấu trúc phân tích cú pháp không kích thước?
struct X { int x; };
int main() {
// return sizeof(X::x); // doesn't work
return sizeof(X()::x); // works, and requires X to be default-constructible
}
Hỗ trợ cho 'sizeof (X :: x)' được bao gồm trong C++ 0x (x http://www.open -std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html). –
@James +1 theo nhận xét của bạn. Câu trả lời của tôi (đã xóa) phải là một bình luận thực sự, bởi vì Tom đã không đề cập đến C++ 0x. Có lẽ anh ta muốn nó trong C++ 98 :) – AraK
Vâng, câu hỏi của tôi là về C++ 98. Tuy nhiên, ngay cả khi tôi xây dựng với '-std = C++ 0x', nó không hoạt động (GCC 4.3.2). Có bất kỳ triển khai trình biên dịch nào hỗ trợ nó chưa? – Tom