在平时的编程中,几乎所有的C++程序中都会用到namespace命名空间。比如在最简单的“Hello World”中:
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello World!";
}
菜鸟教程上是这样对命名空间进行描述的:
假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。
例如我们在hello world程序中的“using namespace std;”,既是声明,我们在下面的程序中使用std这个命名空间中的函数符号、标识符号【如:cout<<】。在我们理解了命名空间的含义之后,上面的程序也可以写作:
#include<iostream>
int main()
{
std::cout<<"Hello World!";
}
::是作用域运算符,“std::cout”既是使用“std”命名空间的“cout”标准输出流,如果不加“std::”,编译会提示“ [Error] ‘cout’ was not declared in this scope ”!
命名空间也是可以自己定义的,在实际的工程应用中,往往需要定义非常多的对象、函数,并且多人协作,为了防止重名、互不影响,就可以使用命名空间把“对象”、“函数”局限在它应该出现的范围里。
如下,我将会写一个animal.h和一个eat.cpp。
namespace_animal.h
#include<iostream>
namespace dog
{
void eat()
{
std::cout<<"I am a dog! I'm eatting!"<<std::endl;
}
}
namespace pig
{
void eat()
{
std::cout<<"I am a pig! I'm eatting!"<<std::endl;
}
}
namespace_eat.cpp
//注意使用自己的头文件需要用""而不是<>
#include "namespace_animal.h"
int main()
{
dog::eat();
pig::eat();
}
运行结果如下:
各吃各的,互不干扰!哈哈!

本文详细介绍了C++中命名空间的概念及其应用场景。通过实例演示如何使用命名空间避免命名冲突,展示了自定义命名空间的方法。
3866

被折叠的 条评论
为什么被折叠?



