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

标签 c++ string std

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

最佳答案

命名空间和 header 是两个独立的概念,做着完全不同的事情:

  1. header <string>声明与字符串库相关的各种实体,如类模板 std::basic_string , 一些 typedef就像std::stringstd::wstring , 和一些函数。
  2. 命名空间用于对相关功能进行分组,并允许在不同的命名空间中使用相同的名称。例如,“vector ”本质上是一些数组(这是在命名空间 std 中定义此名称的标准 C++ 库采用的 View ),而在其他上下文中它是一个数学实体。

当您包含 <string> 时您获得了与在命名空间 std 内声明的字符串库相关的所有实体.有些人反对使用 std::string 的想法因为它更容易使用 string反而。为了帮助这种做法,使用指令,即 using namespace std; 之类的语句可用于查找命名空间 std查找名称时的实体。也就是说,using 指令仅使名称无需限定即可使用。

关于c++ - 为什么我需要 std 和字符串库才能在 C++ 中使用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679984/

相关文章:

c++ - 如何正确销毁 vector 的c++ vector 并释放内存

javascript - 如何使用Jquery分割字符串

javascript - 如何通过计算用户在textarea中输入的文本长度来输入特定标签?

c++ - 引用计数类的库实现

ios::noreplace 的 C++ 替换

c++ - 为什么 set::find 不是模板?

c++ - 在下面的代码中,如何在不使用虚拟值的情况下初始化类成员?

c++ - 如何检查二维数组是否在 C++ 中按升序排列?

c++ - 如何将数字转换为整数 vector ?

php - 如何在不使用explode()的情况下从字符串开头删除单词