Первоначальное намерение C ++ 98 состояло в том, что вы должны использовать <cstdint>
C ++, чтобы избежать загрязнения глобального пространства имен (ну, не <cstdint>
в частности, это добавлено только в C ++ 11, но <c*>
заголовки в целом).
Однако реализации все равно продолжали помещать символы в глобальное пространство имен, и C ++ 11 одобрил эту практику [*]. Итак, у вас в основном есть три варианта:
- Используйте
<cstdint>
и либо полностью квалифицируйте каждый используемый вами целочисленный тип, либо добавьте его в область видимости с помощью и using std::int32_t;
т. Д. (Раздражает, потому что многословен, но это правильный способ сделать это, как и для любого другого символа в стандартной библиотеке C ++)
- Использование
<stdint.h>
(немного плохо, потому что устарело)
- Используйте
<cstdint>
и предполагайте, что ваша реализация поместит символы в глобальное пространство имен (очень плохо, потому что не гарантируется).
На практике я подозреваю, что раздражающий большой объем кода использует последний вариант просто потому, что это легко сделать случайно в реализации, в которой <cstdint>
символы помещаются в глобальное пространство имен. Вы должны попробовать использовать первое. У второго есть одно достоинство: он гарантированно помещает что-то в глобальное пространство имен, а не только, возможно, делает это. Я не думаю, что это особенно полезно, но это может сэкономить немного времени на вводе текста, если это ваш приоритет.
Есть четвертый вариант, #include <cstdint>
за using namespace std;
которым иногда бывает полезно, но есть места, куда не следует помещать using namespace std;
. У разных людей разные представления о том, где находятся эти места, но «на верхнем уровне в файле заголовка» хуже, чем «на верхнем уровне в файле cpp», что хуже, чем «в ограниченном объеме». Некоторые люди using namespace std;
вообще никогда не пишут .
[*] Это означает, что стандартные заголовки C ++ могут помещать данные в глобальное пространство имен, но не обязательны. Таким образом, вы должны избегать столкновения с этими символами, но вы не можете их использовать, потому что их может не быть. По сути, глобальное пространство имен в C ++ - это минное поле, старайтесь его избегать. Кто-то может возразить, что комитет ратифицировал практику реализации, которая почти так же вредна, как закрепление using namespace std;
на верхнем уровне в файле заголовка - разница в том, что реализации делают это только для символов в стандартной библиотеке C, тогда using namespace std;
как для C ++. -только символы. В стандарте C есть раздел, в котором перечислены имена, зарезервированные для будущих дополнений к стандарту. Считать эти имена зарезервированными и в глобальном пространстве имен C ++ - не совсем глупая идея, но это не обязательно.
<cstdint>
. Вот ошибка я получаю:./misc.h:7:10: fatal error: 'cstdint' file not found
.