Để cung cấp cho một chút nền (không liên quan đến câu hỏi, mà sẽ làm theo), trong C++ 11 tôi nhận thấy một vấn đề thu hẹp:Quy tắc quảng cáo số nguyên không đổi?
int foo[] = { 0xFFFFFFFF };
này đã thất bại trong việc biên dịch (thu hẹp chuyển đổi) vì 0xFFFFFFFF
là một unsigned int
. Tuy nhiên, tôi đã thấy các trường hợp trong đó 0xFF
được ký.
Tôi đã xem xét các quy tắc quảng cáo số nguyên, nhưng điều này chủ yếu nằm trong ngữ cảnh của các giá trị và không phải là rvalues / hằng số. Trình biên dịch xác định loại hằng số (không có hậu tố chữ) như thế nào? Có tài liệu hoặc một bảng nhỏ đẹp/"cheat sheet" cho thấy các quy tắc cho điều này? Tôi thậm chí không thực sự chắc chắn những gì này được gọi là, nếu không tôi đã cố gắng để tìm thấy nó bản thân mình trong tiêu chuẩn C++ 11.
Xin cảm ơn trước.
Đây là loại hẹp nhất cần thiết với ký được ưu tiên và tối thiểu là 'int'. – chris
Tôi đã thêm một số chi tiết bổ sung vào câu trả lời của tôi mà bạn có thể thấy hữu ích/thú vị. –