С++: какую библиотеку включить, если вы хотите использовать только size_t?

Я изучаю С++. Предполагается, что один из элементов данных моих классов имеет тип size_t. Теперь size_t — это не встроенный примитивный тип, а скорее определенный тип (как беззнаковое значение, которое обычно не меньше целого числа), который активно используется во всем C++.

Многие библиотеки C++, такие как iostream или string, автоматически добавят size_t к вашей текущей области.

Однако моему классу не нужно включать какие-либо причудливые библиотеки. Поскольку я хочу, чтобы он был как можно более компактным, я хочу включить только файл, отвечающий за создание size_t.

Какая это библиотека?


person Qqwy    schedule 27.09.2016    source источник
comment
Выберите один. Для вашего заявленного желания я бы, вероятно, выбрал <cstddef>   -  person WhozCraig    schedule 27.09.2016
comment
Я иногда делаю это, когда никто не смотрит: typedef decltype(sizeof(1)) size_t; Это не вызовет ошибки, потому что size_t должен быть типом, заданным оператором sizeof, а переопределение типа терпит неудачу только тогда, когда базовый тип отличается от предыдущего определения. Однако это может быть более приемлемым, если оно заключено в ваше собственное пространство имен.   -  person Christopher Oicles    schedule 27.09.2016


Ответы (2)


Вы можете использовать #include <cstddef>

Также см. здесь подробности http://www.cplusplus.com/reference/cstddef/

person Max    schedule 27.09.2016

size_t определяется <stddef.h> как в C++, так и в C.

В C++ вы также можете включить <cstddef>, а затем написать std::size_t. Обычный size_t может компилироваться или нет, но его доступность с этим заголовком не гарантируется. Тем не менее, я не рекомендую это, так как это не имеет никаких преимуществ и имеет проблему, заключающуюся в том, что если вы забудете std:: или его нет в другом включенном коде, код может не скомпилироваться каким-либо другим компилятором.

Из-за проблем с неявным преобразованием в беззнаковый общий тип в выражениях рассмотрите возможность использования знакового ptrdiff_t вместо size_t, за исключением параметров шаблона. Исключением является то, что по крайней мере у одного широко используемого компилятора есть проблемы с сопоставлением параметра шаблона, отличного от size_t, например. необработанный размер массива.

person Cheers and hth. - Alf    schedule 27.09.2016
comment
Downvoter, пожалуйста, объясните глупое отрицательное голосование. Это... из-за упоминания некоторых недостатков компилятора? Да? - person Cheers and hth. - Alf; 27.09.2016
comment
Я не против, но, вероятно, это связано с тем, что вы предлагаете не использовать cstddef и вместо этого предпочитаете stddef.h в C++. Смешивание кода C и C++ на самом деле не означает предпочтения типа без std::. - person skypjack; 27.09.2016
comment
@skypjack: Ну, может быть, но это было бы бессмысленно, как уже говорилось. Использование cstddef не имеет преимуществ и имеет проблемы. Он существует по историческим причинам, а поддержка первоначального обоснования была удалена в C+11. - person Cheers and hth. - Alf; 27.09.2016
comment
@skypjack: Что касается вашего соломенного аргумента. Смешивание кода C и C ++ на самом деле не является вопросом предпочтения типа std::-less , нужно было бы чрезвычайно сложно поверить, прежде всего, чтобы поверить в это. Откуда *!#& вы черпали вдохновение для этого? - person Cheers and hth. - Alf; 27.09.2016
comment
Я даже не знаю, что означает соломенный человек!! Это одна из проблем не носителей языка. С другой стороны, *!#& встречается довольно часто. :-) - person skypjack; 27.09.2016