【发布时间】:2012-03-04 16:28:19
【问题描述】:
这段代码怎么来的
std::map <std::string , int> m;
m["a"]=1;
编译(我使用的是 MSVC 2010)
#include <string>
但没有
#include <string.h>
?
【问题讨论】:
标签: c++ string header header-files
这段代码怎么来的
std::map <std::string , int> m;
m["a"]=1;
编译(我使用的是 MSVC 2010)
#include <string>
但没有
#include <string.h>
?
【问题讨论】:
标签: c++ string header header-files
string.h 用于 c 兼容的 c++ 字符串类 string 用于纯 c++ 字符串类
【讨论】:
<string.h> 是 C 标准库头文件,而 <string> 是 cpp 实际上所有 c 标准头文件都有 .h 扩展名,而非 cpp 有 .h。
【讨论】:
<string.h> 包含诸如 strcpy、strlen 之类的旧函数,用于 C 样式以空字符结尾的字符串。 <string>主要包含std::string、std::wstring等类。【讨论】:
string.h。如果您需要其中包含的功能,您应该使用标题cstring。这或多或少完全绕过了“这两者有什么区别”的问题,因为很明显一个来自 C 库。
<string.h> 是 cstring - http://www.cplusplus.com/reference/clibrary/cstring/
<string> 是 c++ 字符串类 - http://www.cplusplus.com/reference/string/
根据下面的 Nicol Bolas 评论和一些谷歌搜索进行编辑:
<cstring> 通常会导入与<string.h> 相同的内容,但会导入std 命名空间。
<string.h> 通常会将所有内容导入全局命名空间。
根据我的谷歌搜索,它似乎取决于您使用的库实现。
就我个人而言,如果我需要 C 风格的字符串助手,我只会使用 <cstring>。
【讨论】:
<cstring> 不是<string.h> 的同义词。 cstring 将内容放在 std 命名空间中(也可能将它们放在 std 命名空间之外),而 <string.h> 不会。
.h 标头在 C++ 中已弃用。
它们是完全不同的标题。
<string> 是 C++ string 类
<string.h> or <cstring> 定义了操作 C 字符串和数组的函数
【讨论】:
我相信<string.h> 仅用于 C,<string> 用于 C++。所以包括string.h 是行不通的。
【讨论】:
如上所述,string.h 和 cstring 是 C 头文件(而 cstring 基本上是 string.h 的 C++ 包装器),包含 C 字符串的函数,这些函数是由 char[] 终止的 '\0'。您想使用 c++ 类字符串,其标头为 <string>。
【讨论】:
<string.h> 包含 C 库字符串函数。 strlen、strcmp等
<string> 包含std::basic_string 的定义,其类型定义为std::string 和std::wstring。这就是区别。
除了他们都处理字符串之外,他们真的没有任何关系。
【讨论】:
string.h 是 C 标头而不是 C++ 标头,句号!
【讨论】:
<string> is C++ header, not a C header.
string.h是C的头文件,string是C++的头文件。
【讨论】:
<string.h> 也可以被认为是 C++ 头文件。 :)