C ++将类添加到命名空间:为什么?

时间:2015-12-16 13:58:11

标签: c++ namespaces

我是c ++的新手。 为什么在Eclipse(使用MinGW配置)以及其他线程中,我注意到用于向命名空间添加类?

我举一个例子向您展示我的实际疑问:

d

编辑:如评论中所示,完全禁止将类添加到命名空间标准。引用@owacoder,

  

命名空间永远不会关闭,因此您始终可以添加   对它们的类​​定义。但是,通过规范标准   命名空间应被视为已关闭。

为了向您提供上下文的完整视图,这里是Eclipse为我做的Mango.cpp的默认实现:

>>> d
defaultdict(<method-wrapper 'next' of itertools.count object at 0x1057c83b0>,
            {10: 1, 20: 2, 15: 3})

所以我的问题变成了: 为什么使用“namespace std {...}”以及何时将类添加到命名空间是一种很好的做法?

1 个答案:

答案 0 :(得分:5)

您必须了解哪些类和命名空间的基础知识。

类(以及结构,枚举和枚举类)用于在C ++中定义用户定义的类型。

您创建一个类来表示逻辑实体并封装详细信息等。

命名空间是一种标记代码区域和限定变量唯一名称的方法。

如果你只是在一个文件中编写一个类,它将被写在“全局命名空间”中,并且它不被认为是一种好的做法,因为你“污染了命名空间”。

相反,您应该使用命名空间来限制变量名称具有含义的范围。这样,你不会快速耗尽合理的类和变量名称池(你有多少次想写一个“实用程序”类?)

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

int main () 
{
std::cout << firstNamespace::x << '\n';
std::cout << secondNamespace::x << '\n';
return 0;
}

在这种情况下,您可以看到我们可以通过限定命名空间来“重用”不同上下文中的变量名称x。在命名空间块中,我们可以有更多的声明和定义。包括函数,类,结构等。

不要让命名空间保持打开状态,以后可以添加它们。 例如,你可以这样:

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

namespace firstNamespace{
int y=11;
}

这里,我们添加了firstNamespace :: y。

更重要的是,您可以观察到std是由C ++提供的命名空间,它包含许多有用的变量,像cout这样的对象是std :: ostream类型,函数和类似std :: vector,std :: ostream,等。

所以回到你的问题,你想在命名空间中包装类定义的原因是不污染全局命名空间。