std::size_t n = sizeof(long);
На самом деле, вы не спросили, что конкретно, кажется, плохая практика ИНТ выше. Использование size_t, квалификация с пространством имен std, ...
Как указано в стандарте C++ (18.1), size_t является типом, определенным в стандартном заголовке. Я предлагаю отказаться от любых мыслей и впечатлений о возможном наследовании с языка C. C++ - это отдельный и другой язык, и лучше рассматривать его как таковой. Он имеет собственную стандартную библиотеку, и все элементы стандартной библиотеки C++ определены в пространстве имен std. Тем не менее, в C++ можно использовать элементы C Standard Library.
Я считаю, что включение в качестве грязного взлома. В стандарте C++ указано, что содержимое заголовков одинаковое или основано на соответствующих заголовках из стандартной библиотеки C, но в ряде случаев были применены изменения. Другими словами, это не прямая копия вставки заголовков C в заголовки C++.
size_t не является встроенным в C++. Это тип, определяющий, какой тип интегрального типа используется как возвращаемый тип оператора sizeof(), поскольку фактический тип возвращаемого значения sizeof() определяется реализацией, поэтому стандарт C++ унифицируется путем определения size_t.
будет следующая программа (без включает в себя), как ожидается, компилировать на все компиляторы C++?
size_t foo()
{
return sizeof(long);
}
Стандарт C++ говорит (1.4):
Имена, определенные в библиотеке есть область пространства имен (7.3). Модуль перевода C++ (2.1) получает доступ к этим именам, включая соответствующий стандартный заголовок библиотеки (16.2).
Размер_t - это имя, определенное в пространстве имен std, поэтому каждая программа, которая использует это имя, должна включать соответствующий заголовок в этом случае.
Далее 3.7.3 глава говорит:
Однако, имея в виду Std, станд :: bad_alloc и станд :: size_t плохо сформированным, если имя не было объявлено, включив соответствующий заголовок.
Учитывая, что программа с использованием size_t, но не включая заголовок, плохо сформирована.
C не имеет пространств имен. – wnoise 2008-10-26 02:35:53
Он встроен в C++, когда вы #include, и находится в пространстве имен std. См. Мой ответ ниже. –
2008-10-26 02:38:31
Это не «другой способ задать этот вопрос» - это другой вопрос: main возвращает int. – fizzer 2008-10-26 11:07:13