<string.h> или <string>? - PullRequest
       12

<string.h> или <string>?

22 голосов
/ 29 ноября 2011

Какой лучший способ включить стандартный заголовок string.h в проект C ++? Используя [точку] h в конце, вот так:

#include <string.h>

или просто пишу

#include <string>

Или, может быть, другим способом, которого я не знаю?

Спасибо!

Ответы [ 6 ]

59 голосов
/ 29 ноября 2011

Это два разных заголовка.

  • <string> для с ++ std::string класс
  • <string.h> для строковых функций c (например, strlen() и т. Д.), Которые должны быть <cstring> для проекта c ++ (это третий, о котором вы не знали).
8 голосов
/ 29 ноября 2011

это совсем другое!

<string.h> эта библиотека для строк в стиле C

<string> для строк в C ++

по стандарту в C ++ вы должны использовать <cstring> вместо <string.h>

2 голосов
/ 29 ноября 2011

Wiki говорит:

Стандартная библиотека C ++ также включает 18 заголовков ISO C90 C стандартная библиотека заканчивается на ".h", но их использование не рекомендуется. Все другие заголовки в стандартной библиотеке C ++ НЕ заканчиваются на ".h".

Каждый заголовок из стандартной библиотеки C включен в C ++ Стандартная библиотека под другим именем, созданная путем удаления .h, и добавление «с» в начале; например, time.h становится ctime.

1 голос
/ 29 ноября 2011

строка является c ++ stl headfile предоставить шаблон класса "строка" string.h - это стандартный головной файл c обеспечить много функций для использования. как strlen strcpy memcpy. если вы хотите использовать в пространстве имен std, которое не использует глобус пространства имен или не хочет использовать string.h вместо этого вы можете использовать cstring.

0 голосов
/ 29 ноября 2011

Заголовочные файлы *.h часто являются заголовочными файлами C, которые вы можете использовать в C ++, возможно, с extern "C" { ... } wrapping

Заголовки без *.h обычно являются подлинными заголовками C ++.

Это эмпирическое правило.

В последних и предыдущих стандартах C ++ (c ++ 11, C ++ 03) определены заголовки, такие как <cstdio>, для правильной упаковки исходных заголовков C, использования пространств имен и т. Д.

0 голосов
/ 29 ноября 2011

Стандарт

#include <string>
...