преобразование из size_t в unsigned int - PullRequest
2 голосов
/ 05 ноября 2011

Возможно ли, что преобразование из 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 ++

платформа: любая

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Да, это возможно, size_t и int не обязательно имеют одинаковый размер. На самом деле очень распространено иметь 64-битные size_t с и 32-битные int с.

C ++ 11 черновик N3290 говорит об этом в §18.2 / 6:

Тип size_t является целочисленным типом без знака, определенным реализацией, который является достаточно большим, чтобы содержать размер в байтах любого объекта.

unsigned int, с другой стороны, требуется только для того, чтобы иметь возможность хранить значения от 0 до UINT_MAX (определены в <climits> и следуют стандартному заголовку C <limits.h>), который гарантированно будет не менее 65535 (2 16 -1). * * тысяча двадцать-одна

1 голос
/ 05 ноября 2011

Да, переполнение может произойти на некоторых платформах.Например, size_t может быть определено как unsigned long, что может быть больше, чем unsigned int.

...