为什么我需要 std 和字符串库才能在 C++ 中使用字符串

B. *_*tas 5 c++ string std

我知道该string类型存在于namespace std. 我还知道需要<string>包含一个库才能使用该string类型。我的问题是:为什么我需要两者(包括库并使用 std 命名空间)来定义字符串?为什么我不能通过包含库来使用它?namespace std更一般地说,库中缺少什么内容?

Die*_*ühl 3

命名空间和标头是两个独立的概念,执行完全不同的操作:

  1. 标头<string>声明了与字符串库相关的各种实体,例如类模板std::basic_string、一些typedefstd::stringandstd::wstring以及一些函数。
  2. 命名空间用于对相关功能进行分组,并允许在不同的命名空间中使用相同的名称。例如,“向量”对于某些人来说本质上是一个数组(这是标准 C++ 库在命名空间中定义这个名称所采取的观点std),而在其他上下文中它是一个数学实体。

当您包含时,<string>您将获得与在命名空间内声明的字符串库相关的所有实体std。有些人反对使用这个想法,std::string因为它更容易使用string。为了帮助这种实践,可以使用using 指令(即类似语句)在查找名称时在命名空间中查找实体。也就是说,using 指令仅使名称不带限定条件地可用。using namespace std;std