3

size_t から unsigned int に変換すると、オーバーフローが発生する可能性はありますか?

 size_t x  = foo ( ) ;  // foo ( ) returns a value in type size_t
 unsigned int ux = (unsigned int ) x ;

 ux == x  // Is result of that line always 1 ?

言語: C++

プラットフォーム: 任意

4

2 に答える 2

4

はい、可能です。必ずしも同じサイズである必要はsize_tありintません。実際には、64bitsize_tと 32bitがあるのは非常に一般的intです。

C++11 ドラフト N3290 では、§18.2/6 で次のように述べています。

size_tは、任意のオブジェクトのバイト単位のサイズを格納するのに十分な大きさの実装定義の符号なし整数型です。

unsigned int一方、0 から( C 標準ヘッダーUINT_MAXで定義され、それに続く) までの値を格納できることだけが要求されます。これは、少なくとも 65535 (2 16 -1) であることが保証されているだけです。<climits><limits.h>

于 2011-11-05T10:02:59.380 に答える
1

はい、一部のプラットフォームではオーバーフローが発生する可能性があります。たとえば、size_tは として定義できますがunsigned long、これは よりも簡単に大きくなる可能性がありますunsigned int

于 2011-11-05T10:03:53.977 に答える