Когда я зацикливаюсь на std::vector<Foo>
(или каждом контейнере, имеющем итератор произвольного доступа), я использую целочисленную переменную без знака i
. Если я хочу соблюдать норму, должен ли я использовать std::size_t
или тип, заданный самим контейнером: std::vector<Foo>::size_type
?
Если я выбрал std::size_t
(из соображений удобочитаемости), могу ли я быть уверен, что каждая реализация каждого контейнера в пространстве имен std
использует std::size_t
как size_type
?
Примечание. Я использую только C++98 (из соображений совместимости).
size_t
быть определением типаunsigned long
, аstd::vector::size_type
может бытьunsigned long long
на 64-битной машине Linux. Оба имеют ширину 64 бита и будут иметь одинаковый диапазон, но они не одного типа. (пример) - person NathanOliver   schedule 18.07.2017std::size_t
иstd::vector<T>::size_type
одинаковый размер (я не могу сейчас попытаться реализовать его, но я уверен, что это выполнимо). - person nefas   schedule 18.07.2017unsigned long int
везде (хорошо с gcc,std::size_t
этоunsigned long int
). И теперь у меня проблема с совместимостью при переносе на Windows с компиляторами Intel, гдеstd::size_t
равноunsigned long long int
. :-/ - person Caduchon   schedule 18.07.2017