ご存知のように、符号付き整数オーバーフローは未定義の動作です。しかし、C ++ 11のcstdint
ドキュメントには興味深いものがあります。
幅がそれぞれ正確に8、16、32、64ビットで、パディングビットがなく、負の値に2の補数を使用する符号付き整数型(実装が型を直接サポートしている場合にのみ提供)
そして、ここに私の質問があります:標準では、、、および負の数は2の補数であると明示的に述べられているint8_t
のでint16_t
、これらのタイプのオーバーフローは未定義の動作ですか?int32_t
int64_t
編集私はC ++ 11とC11標準をチェックしました、そしてここに私が見つけたものがあります:
C ++ 11、§18.4.1:
ヘッダーは、C標準の7.20と同じように、すべての関数、タイプ、およびマクロを定義します。
C11、§7.20.1.1:
typedef名は
intN_t
、幅N、パディングビットなし、2の補数表現の符号付き整数型を指定します。したがって、int8_t
は、正確に8ビットの幅を持つそのような符号付き整数型を示します。