Như chúng ta biết, tràn số nguyên có dấu là hành vi không xác định . Nhưng có điều gì đó thú vị trong cstdinttài liệu C ++ 11 :
kiểu số nguyên có dấu với độ rộng chính xác 8, 16, 32 và 64 bit tương ứng không có bit đệm và sử dụng phần bù của 2 cho các giá trị âm (chỉ được cung cấp nếu việc triển khai hỗ trợ trực tiếp kiểu)
Và đây là câu hỏi của tôi: kể từ khi tiêu chuẩn nói rõ ràng rằng int8_t, int16_t, int32_tvà int64_tsố âm là 2 của bổ sung, vẫn còn tràn của các loại một hành vi không xác định?
Chỉnh sửa Tôi đã kiểm tra Tiêu chuẩn C ++ 11 và C11 và đây là những gì tôi tìm thấy:
C ++ 11, §18.4.1:
Tiêu đề xác định tất cả các chức năng, kiểu và macro giống như 7.20 trong tiêu chuẩn C.
C11, §7.20.1.1:
Tên typedef
intN_tchỉ định một kiểu số nguyên có dấu với độ rộng N, không có bit đệm và biểu diễn phần bù của hai. Do đó,int8_tbiểu thị một kiểu số nguyên có dấu với độ rộng chính xác là 8 bit.