crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> size_t, size_type, unsigned
Andrew Selivanov
  опции профиля:
сообщение 3.4.2008, 17:40
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Кто нибудь действительно понимает разницу между ними? Четко где нибудь это разъясняется? Я накопал такое определение:

size_t is the type of the value returned by sizeof(). It is also a
typedef in some standard headers.

size_type is another typedef used for example in the standard
containers, like std::vector and std::string.

unsigned is a standard type that is built into the compiler. As such,
it is available immediately, without any typedefs.

On some systems, size_t, size_type, and unsigned could all be the same
type. On other systems they might be different. By always using the
proper type, your code has a bigger chance of being portable from one
system to another.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 3.4.2008, 18:08
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


unsigned - ключевое слово языка. Обозначает, что следующий за ним интегральный тип не имеет знака. Допускается употреблять без последующего типа, тогда обозначает unsigned int.

size_t - стандартный (описанный в стандарте) псевдоним (typedef) для типа возвращающегося при запросе размера объекта языка (sizeof). Всегда беззнаковый (отрицательных размеров не бывает) обычно unsigned int, или unsigned long. Вполне представимы и системы с unsigned short int и unsigned long long.

size_type - стандартный псевдоним для типа возвращающегося при запросе размера контейнера совместимого с STL. Вполне может быть любым беззнаковым типом - в зависимости от реализации контейнера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.4.2008, 18:28
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у меня в WinAVR, такое:
#define     __SIZE_TYPE__   long unsigned int
...
typedef __SIZE_TYPE__     size_t

одно время гадал зачем в некоторых файла написано __need_size_t, так и не понял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 4.4.2008, 10:21
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


До сих пор не все компиляторы стандарт нормально поддерживают. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 4.4.2008, 10:47
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Вот, кажется нашел :) size_type изначально был придуман для аллокаторов, чтобы они поддурживали не только Intel архитектуру ;)

20.1.5 Allocator requirements

4 Implementations of containers described in this International Standard are permitted to assume that their Allocator template parameter meets the following two additional requirements beyond those in Table 32.

— The typedef members pointer, const_pointer, size_type, and difference_type are required to be T*,T const*, size_t, and ptrdiff_t, respectively.

5 Implementors are encouraged to supply libraries that can accept allocators that encapsulate more general memory models and that support non-equal instances. In such implementations, any requirements imposed on allocators by containers beyond those requirements that appear in Table 32, and the semantics of containers and algorithms when allocator instances compare non-equal, are implementation-defined.


А вот что по этому поводу говорит Pete Becker:
http://www.velocityreviews.com/forums/show...mp;postcount=10
If you have ancient copies of the STL documentation from HP, you'll see my name listed as one of the contributors. That's because I "fixed" a problem that Alex Stepanov and Meng Lee had in specifying allocators. They were dealing specifically with the Intel architecture, but that was just a particular instance of a more general problem. So
the true answer is that both of your alternatives are correct: size_type is there for the Intel segmented architecture in particular, and for alternative memory managers in general.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.9.2019, 7:34