我想使用字符串类。
我还应该参与using namespace std;
吗?
我认为#include <string>
就足够了,但是在CLion中,当这两个(命名空间或包含)中只有一个不存在时,就会出现一些错误。
使事情变得更复杂的是,存在<string>
或<strings.h>
。有什么区别?
答案 0 :(得分:5)
<string>
是C ++,提供std::string
类。
<string.h>
是C(C ++等效于<cstring>
),并且仅提供在char*
上运行的函数。
请勿使用using namespace std;
(请参阅C++ Core Guidelines)。
答案 1 :(得分:2)
在C ++中,using
语句与包含该名称空间(或类型)的功能无关。相反,它允许您在using
语句之后在当前作用域的其余部分(或编译单元,如果您在全局作用域中使用该语句)中不带名称空间前缀的情况下使用语句中的名称空间。
所以你可以写
#include <string>
std::string my_string;
或
#include <string>
using namespace std;
string my_string;
就像其他人提到的那样-比第二个版本更推荐使用第一个版本,因为通常是因为事物位于其自己的名称空间(例如此处的std
名称空间)中。如果您有一个笼统的using
声明,则可能会遇到意想不到的名称冲突或其他问题。如果在头文件中执行此操作尤其如此,除非您确切知道结果将是什么以及在哪里,否则永远不要这样做。