Kích thước char, int, long double ... có thể thay đổi từ trình biên dịch này sang trình biên dịch khác. Nhưng tôi có đảm bảo theo tiêu chuẩn C++ 11 hoặc C11 rằng kích thước của bất kỳ loại tích phân cơ bản đã ký và chưa ký nào là giống nhau không?Tôi có đảm bảo rằng sizeof (loại) == sizeof (loại không dấu) không?
Trả lời
C++ 11 Tiêu chuẩn nói về các loại nguyên:
(§3.9.1/3) Đối với mỗi tiêu chuẩn ký kiểu nguyên, tồn tại một tiêu chuẩn tương ứng (nhưng khác nhau) kiểu dữ liệu integer unsigned : "Unsigned char", "unsigned short int", "unsigned int", "unsigned long int" và "unsigned long long int", mỗi trong số đó chiếm cùng một lượng lưu trữ và có cùng yêu cầu căn chỉnh (3.11) là loại số nguyên đã ký tương ứng; có nghĩa là, mỗi loại số nguyên đã ký có cùng một đối tượng đối tượng làm loại số nguyên không dấu tương ứng của nó. Tương tự như vậy, đối với mỗi loại số nguyên được ký mở rộng tồn tại một loại số nguyên không dấu mở rộng tương ứng với cùng số lượng yêu cầu lưu trữ và căn chỉnh. [...]
Vì vậy, câu trả lời là có.
Đối với C11, có một tuyên bố tương ứng ở đây (đây là từ N1570):
(§6.2.5/6) Đối với mỗi loại nguyên ký, có một tương ứng (nhưng khác nhau) unsigned kiểu số nguyên (được chỉ định với từ khóa unsigned) có sử dụng cùng một lượng lưu trữ (bao gồm thông tin dấu) và có các yêu cầu liên kết cùng một [...]
có, có là một đảm bảo đầy đủ mà sizeof (loại đã ký) bằng sizeof (loại chưa ký) vì không được ký chỉ lấy không gian của số âm của loại đã ký để tăng phạm vi của nó.
Không có gì trong tiêu chuẩn bắt buộc rằng 'UINT_MAX > INT_MAX'; máy đăng ký độ lớn có thể làm cho chúng bằng nhau. – supercat
- 1. sizeof (int) == sizeof (void *)?
- 2. Từ khóa không dấu có ảnh hưởng đến kết quả của sizeof không?
- 3. sizeof() điều hành với nhiều loại
- 4. "C" sizeof với loại hoặc biến
- 5. Là sizeof (enum) == sizeof (int), luôn luôn?
- 6. sizeof() một phần của cấu trúc C - loại
- 7. Có đảm bảo rằng bộ nhớ sẽ không ra các bit đệm trong cấu trúc không?
- 8. C# sizeof thập phân?
- 9. Ứng dụng không hợp lệ 'sizeof' vào loại không đầy đủ 'SDL_Window'
- 10. sizeof() cấu trúc không xác định. Tại sao?
- 11. sizeof (int) trên x64?
- 12. Có bit tương đương với sizeof() trong C không?
- 13. sizeof chuỗi chữ
- 14. sizeof hành xử bất ngờ
- 15. Tại sao tôi không thể sử dụng sizeof() trong #if?
- 16. Tại sao sizeof (int) khác với sizeof (int *)?
- 17. Tại sao sizeof (void) == 1?
- 18. Đảm bảo không đảm bảo VirtualMachineError
- 19. sizeof for a null terminated const char *
- 20. Có phương pháp giống như sizeof nào trong Java không?
- 21. sizeof() std :: vector (C++)
- 22. sizeof vs strlen
- 23. sizeof làm gì?
- 24. Mục tiêu-c Đảm bảo rằng các tham số var-arg là đúng loại và đếm
- 25. C2070 - bất hợp pháp sizeof toán hạng
- 26. sizeof Con trỏ trỏ tới mảng
- 27. C Pointer Arithmetic sizeof (struct)
- 28. Có một loại Java tích hợp đảm bảo phương thức thực thi (T t) không?
- 29. thực hiện điều hành sizeof
- 30. sizeof float (3.0) vs (3.0f)
Tôi nên hy vọng như vậy trừ khi có bằng cách nào đó một loại mà bất bình đẳng có ý nghĩa, trong trường hợp đó, tôi rất vui khi nghe nó. – chris
Cũng như một sang một bên, sizeof char luôn luôn là 1. char có thể có kích thước bất thường, như 16 bit, nhưng sau đó sizeof char vẫn sẽ là 1 và sizeof một loại 32 bit sẽ là 2. –