字符串类型是头文件还是标准命名空间?

is the string type a header file or in the standard namespace?

我是C++的新手,主要是编程,几天前才开始学习,对此我有点困惑。 标准命名空间中的字符串变量类型吗? 我发现我可以在不使用 #include <string> 的情况下使用字符串。我还可以使用 using namespace std; 来激活字符串的使用,或者例如 std::string mystring;

我知道使用 using namespace std; 允许在标准命名空间内使用所有 commands/functions,即 cout.

如果字符串在标准命名空间内,#include <string> 是否与 using std::string; 相同?

std::string 是标准库 header <string> 中定义的 class。与标准库的所有名称一样,它在命名空间 std.

中声明

is #include <string> the same as saying using std::string; ?

没有。两者有完全不同的含义。

#include <string> 表示“将 header <string> 的内容包含到此文件中”。 header 包含 class std::string 等的定义。

using std::string; 本质上意味着“在当前命名空间中将标识符 string 声明为 std::string 的类型别名”。

“我发现我可以在不使用 #include <string> 的情况下使用字符串”

这是巧合。您包括了另一个 header,偶然包括了 <string>。这在 C++ 中是允许的,并且很常见,例如<sstream>。但是你不能依赖这个。如果你需要std::string,你应该#include <string>

这将包括来自 std 命名空间的 std::string。这个命名空间实际上是由多个header定义的。与类不同,命名空间不需要在一个header中定义;它们可以分布在多个。