您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。你不得不体检一些其他信息用于区分

命名空间可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

`
using namespace std;`是必须要写的使用空间语句

命名空间使用关键字namespace
namespace namespace_name {
// 代码声明
}
调用命名空间空间名::code; // code 可以是变量或函数

  1. #include <iostream>
  2. using namespace std; //必须写的
  3. // 第一个命名空间
  4. namespace first_space{
  5. void func(){
  6. cout << "Inside first_space" << endl;
  7. }
  8. }
  9. // 第二个命名空间
  10. namespace second_space{
  11. void func(){
  12. cout << "Inside second_space" << endl;
  13. }
  14. }
  15. int main ()
  16. {
  17. // 调用第一个命名空间中的函数
  18. first_space::func();
  19. // 调用第二个命名空间中的函数
  20. second_space::func();
  21. return 0;
  22. }
  23. 当上面的代码被编译和执行时,它会产生下列结果:
  24. Inside first_space
  25. Inside second_space

如上所示,虽然是同名函数,但是指定了各自所属的空间,所以不冲突

命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。
如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:
namespace namespace_name {
// 代码声明
}

命名空间嵌套
命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:
namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
如果使用空间1,则空间2也是可用的,但是使用空间2,却不能使用空间1


using

可以使用using namespace ?;语句告诉编译器,后续代码默认使用?空间的函数/变量/类

using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 std 命名空间中的 cout 部分,您可以使用如下的语句:
using std::cout;