我知道string
类型存在于 namespace std
.我也知道有 <string>
需要包含的库才能使用 string
类型。我的问题是:为什么我需要两者(包括库和使用 std 命名空间)来定义字符串?为什么我不能通过包含库来使用它?更一般地说,namespace std
是什么意思?包含库中缺少的内容?
最佳答案
命名空间和 header 是两个独立的概念,做着完全不同的事情:
- header
<string>
声明与字符串库相关的各种实体,如类模板std::basic_string
, 一些typedef
就像std::string
和std::wstring
, 和一些函数。 - 命名空间用于对相关功能进行分组,并允许在不同的命名空间中使用相同的名称。例如,“vector ”本质上是一些数组(这是在命名空间
std
中定义此名称的标准 C++ 库采用的 View ),而在其他上下文中它是一个数学实体。
当您包含 <string>
时您获得了与在命名空间 std
内声明的字符串库相关的所有实体.有些人反对使用 std::string
的想法因为它更容易使用 string
反而。为了帮助这种做法,使用指令,即 using namespace std;
之类的语句可用于查找命名空间 std
查找名称时的实体。也就是说,using 指令仅使名称无需限定即可使用。
关于c++ - 为什么我需要 std 和字符串库才能在 C++ 中使用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679984/