我是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 {...}”以及何时将类添加到命名空间是一种很好的做法?
答案 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,等。
所以回到你的问题,你想在命名空间中包装类定义的原因是不污染全局命名空间。