Почему этот код
std::map <std::string , int> m;
m["a"]=1;
компилируется с (я использую MSVC 2010)
#include <string>
но не с
#include <string.h>
?
Почему этот код
std::map <std::string , int> m;
m["a"]=1;
компилируется с (я использую MSVC 2010)
#include <string>
но не с
#include <string.h>
?
<string.h> содержит старые функции, такие как strcpy, strlen для строк с нулевым завершением в стиле C.<string> содержит в основном std::string, std::wstring и другие классы. string.h - это заголовок C, а не заголовок С++, период!
<string.h> - cstring - http://www.cplusplus.com/reference/clibrary/cstring/
<string> - класс строк С++ - http://www.cplusplus.com/reference/string/
Редактировать комментарий Nicol Bolas ниже и немного поискового запроса:
<cstring> обычно импортирует те же вещи, что и <string.h>, но в пространство имен std.
<string.h> обычно импортирует все в глобальное пространство имен.
Похоже, что это зависит от используемой вами реализации библиотеки, но, согласно моему поисковому запросу.
Лично я использую только <cstring>, если мне нужны помощники строки стиля C.
string.h - это заголовочный файл C, а string - файл заголовка С++.
<string.h> содержит строковые функции библиотеки C. strlen, strcmp и т.д.
<string> содержит определение для std::basic_string, которое имеет typedefs std::string и std::wstring. Это различие.
У них действительно нет никаких отношений, кроме того, что они оба имеют дело со строками.
Это совершенно разные заголовки.
<string> - это класс С++ string
<string.h> or <cstring> определяет функции для управления строками и массивами C
Я считаю, что <string.h> используется только для C и <string> для С++. Поэтому включение string.h не работает.
Как указано, string.h и cstring являются заголовками C (в то время как cstring - это в основном С++-оболочка для string.h), содержащая функции для строк C, которые char[] завершены '\0'. Вы хотите использовать строку класса С++, заголовок которой <string>.