Включая стандартные файлы заголовков. string.h или cstring? или оба?

Возможный дубликат:
Разница между string.h и cstring?

Что лучше в программировании на С++ при включении стандартных файлов заголовков по отношению к

включая cmath вместо math.h или наоборот?

включая cstring вместо string.h или наоборот?

и для других заголовочных файлов <c*> и <*.h>, которые, по-видимому, похоже, выполняют одно и то же?

Ответы

Ответ 1

<cstring> новее; <string.h> действительно существует для обратной совместимости (и для C, конечно). Разница в том, что <cstring> помещает строковые функции в пространство имен std, а <string.h> помещает их в глобальное пространство имен.

Кроме того, <cstring> изменяет типы определенных функций для повышения безопасности типов. Например, декларация C

char *strchr(char const *, int);

заменяется перегрузками (в пространстве имен std)

char       *strchr(char       *, int);
char const *strchr(char const *, int);

В случае <cmath> существуют дальнейшие различия с <math.h>, которые делают <cmath> более идиоматичным и менее C-подобным.

Предпочитает <cstring> для нового кода и использовать префикс std:: для функций.