在C++项目中包含标准头文件string.h,最好的方法是什么?应该使用结尾处的[dot]h,如下所示:
#include <string.h>
或者只是写作
#include <string>
或者,也许可以使用我不知道的另一种方法?
谢谢!
这是两个不同的头文件。
<string>
是为了 C++ 的 std::string
类。<string.h>
是为了 C 字符串函数(如 strlen()
等),对于 C++ 项目应该使用 <cstring>
(这是第三个,你可能不知道)。<cstring>
而不是<string.h>
并不是一个好主意。这样做除了增加代码的脆弱性外,没有任何好处,因为<cstring>
不能保证不污染全局命名空间。拥有一个非污染的全局命名空间是<cstring>
的最初动机,但据我所知,没有编译器实现了这一点,并且在C++11中,这种保证已经消失了。 - Cheers and hth. - Alf<cstring>
”。这是错误的信息。现在你已经意识到这一点,却拒绝重新考虑,从某种程度上说是好事:读者可以确定你的建议没有基于任何理性评估。 - Cheers and hth. - Alf这是有很大的区别的!
<string.h>
是C风格字符串所用的库。
<string>
是C++字符串所用的库。
按照C++标准,你应该使用 <cstring>
而不是 <string.h>
。
std
命名空间中,好吗? - triclosan维基百科 上提到:
C++标准库还包含了18个以".h"结尾的ISO C90 C标准库头文件,但它们已经过时。C++标准库中的所有其他头文件不会以".h"结尾。
每个来自C标准库的头文件在C++标准库中都有一个不同的名称,通过删除.h并在开头添加'c'而生成;例如,'time.h'变成了'ctime'。
string是C++标准模板库头文件,提供了模板类'string';string.h是C标准头文件,提供了许多函数可供使用,如strlen、strcpy、memcpy等。如果你想在命名空间std中使用它,而不是使用全局命名空间或不想使用string.h,那么可以使用cstring代替。
*.h
头文件通常是C头文件,您可以在C++中使用extern "C" { ... }
进行包装。
没有任何*.h
的头文件通常是真正的C++头文件。
这只是一个经验法则。
最新和以前的C++标准(c++11、C++03)定义了像<cstdio>
这样的头文件,以适当地包装原始的C头文件,使用命名空间等。
标准是
#include <string>