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