除了'std'以外的c ++中有用的命名空间

udp*_*nil 4 c++

每当我阅读有关C++的书籍时,我都会找到一个"使用命名空间std"的例子.

我想知道C++中是否存在任何其他名称空间有用吗?

The*_*uck 12

提升.
std :: tr1.(技术报告1)

但这using namespace std;不是一个好主意,尤其不是在头文件中.每次使用它时都会增加5个字符,以获得更清晰的代码和更少的冲突.


Jam*_*lis 6

C++标准库中的所有内容都在std命名空间中(或者是嵌套的命名空间std).

当然,其他库使用其他名称空间.您将需要查阅您正在使用的任何其他库的文档,以确定它们使用的命名空间.

也就是说,使用指令通常是一个坏主意.使用声明来使用命名空间中的单个名称要好得多.这对std命名空间尤其重要.std命名空间中有许多常用名称,当您尝试引用自己的函数或类并意外引用标准库函数或类时,很容易遇到难以解决的问题.例如,这很糟糕:

using namespace std;
cout << "Hello world" << endl;
Run Code Online (Sandbox Code Playgroud)

这个更好:

using std::cout;
using std::endl;
cout << "Hello world" << endl;
Run Code Online (Sandbox Code Playgroud)

在我看来,当您在整个程序中使用完全限定名称时,代码通常更清晰; 这使得实体来自哪里更清楚,并且留下更少的错误空间:

std::cout << "Hello world" << std::endl;
Run Code Online (Sandbox Code Playgroud)

(也有例外所有这些规则,当然.例如,在使用的时候std::bind,它的使用殴打std::placeholders::_1和它的朋友.这是很容易阅读,使用的代码using std::placeholders;,然后就指的是_1,_2等using指令应该是但是,在函数内部,不在命名空间范围内.)