命名空间和库之间的区别

问题描述 投票:0回答:1

我正在学习 C++,我想知道命名空间和库之间的区别。 当我添加类似

using namespace std;
的内容时,它与添加名为 std 的库的“实际”效果不一样?

c++ namespaces libraries
1个回答
0
投票

您的编译器附带标准的实现。这是一堆预先编写的代码,可以执行各种有用的操作。标准库中的大多数名称都是在命名空间

std
中定义的,因此您可以在名称上添加前缀:
std::cout
std::vector
等。或者,如果您相信互联网的智慧(提示:不要t!)你写
using namespace std;
,然后你就不需要
std
前缀:
cout
vector

您还可以在程序中使用许多其他库。每个库都包含链接到的库文件中的一堆预先编写的代码,以及一个或多个头文件,这些头文件告诉编译器库中定义的名称。这些名称可能会也可能不会(但肯定应该 bd)在特定于该库的命名空间内定义。就像标准库一样,您可以使用命名空间名称作为您在库中使用的任何名称的前缀:xyz_lib::do_something_wonderful()

rochester::do_something_wonderful()
。并且,与标准库一样,您可以编写
using namespace xyz_lib; using namespace rochester;
,然后您可以尝试调用
do_someting_wonderful();
。但编译器会抱怨,因为有两个名为 
do_something_wonderful
 的函数,而 
using
 指令破坏了命名空间名称,因此编译器不知道你指的是哪一个。但您仍然可以使用其限定名称来调用其中任何一个。

简短版本:库由一堆预先编写的代码组成;命名空间为一组属于在一起的名称提供公共前缀。库中的代码通常定义在单个命名空间内,但有时同一库的不同部分有多个命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.