C++命名空间namespace怎么定义

其他教程   发布日期:2024年11月20日   浏览次数:268

今天小编给大家分享一下C++命名空间namespace怎么定义的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、命名空间的定义

定义命名空间,使用namespace关键字,后面跟命名空间的名字,然后接一对花括号{ } 即可,{ }中即为命名空间的成员。

1.一般定义

  1. namespace test
  2. {
  3. int a = 10;
  4. int b = 100;
  5. int ADD(int x, int y)
  6. {
  7. return x + y;
  8. }
  9. }

2.嵌套定义

  1. namespace test
  2. {
  3. int a = 10;
  4. int b = 100;
  5. int Add(int x, int y)
  6. {
  7. return x + y;
  8. }
  9. namespace test2
  10. {
  11. int c(99);
  12. int d(9);
  13. //c++可以使用括号来进行列表初始化
  14. int Sub(int x, int y)
  15. {
  16. return x - y;
  17. }
  18. }
  19. }

3.重名定义

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

例如:

  1. namespace N1 //N1是命名空间的名称
  2. {
  3. //用花括号{ }将命名空间的内容包起来
  4. //命名空间的内容,即可以定义变量,也可以定义函数
  5. int a;
  6. int Add(int x, int y)
  7. {
  8. return x + y;
  9. }
  10. }
  11. namespace N1 //再次定义命名空间 N1
  12. {
  13. int Mul(int x, int y)
  14. {
  15. return x * y;
  16. }
  17. }

实际上等同于:

  1. namespace N1 //N1是命名空间的名称
  2. {
  3. //用花括号{ }将命名空间的内容包起来
  4. //命名空间的内容,即可以定义变量,也可以定义函数
  5. int a;
  6. int Add(int x, int y)
  7. {
  8. return x + y;
  9. }
  10. int Mul(int x, int y)
  11. {
  12. return x * y;
  13. }
  14. }

二、命名空间的使用

C++为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中要使用标准库里面的东西,有三种方式:

  • 加命名空间的名称及作用域限定符。

  • 使用using引入命名空间的成员。

  • 使用using namespace 命名空间名称引入,将所有名称全展开。

1.命名空间的名称及作用域限定符

代码如下:

  1. namespace test
  2. {
  3. int a = 10;
  4. int b = 100;
  5. int Add(int x, int y)
  6. {
  7. return x + y;
  8. }
  9. namespace test2
  10. {
  11. int c(99);
  12. //c++可以使用括号来进行初始化
  13. int d(9);
  14. int Sub(int x, int y)
  15. {
  16. return x - y;
  17. }
  18. }
  19. }
  20. int main()
  21. {
  22. std::cout << test::Add(test::a, test::b) << std::endl;
  23. std::cout << test::test2::Sub(test::test2::c, test::test2::d) << std::endl;
  24. return 0;
  25. }

指定命名空间&ndash;麻烦,每个地方都要指定,但也是最规范的方式。

2.使用using namespace 命名空间全展开

代码如下:

  1. using namespace std;

把std整个展开,相当于库里面的东西全部到全局域里面去了,使用起来方便但是可能会有与自己命名空间定义的冲突,规范工程中不推荐这种,日常练习可以用这种。

3.使用using引入命名空间的成员

代码如下:

  1. int c = 100;
  2. namespace N
  3. {
  4. int a = 10;
  5. int b = 20;
  6. int Add(int left, int right)
  7. {
  8. return left + right;
  9. }
  10. int Sub(int left, int right)
  11. {
  12. return left - right;
  13. }
  14. }
  15. using std::cout;
  16. using std::endl;
  17. int main()
  18. {
  19. printf("%d
  20. ", N::a);
  21. printf("%d
  22. ", N::b);
  23. printf("%d
  24. ", N::Add(1, 2));
  25. printf("%d
  26. ", N::Sub(1, 2));
  27. int c = 10;
  28. printf("%d
  29. ", c); //局部变量优先,所以c为10
  30. printf("%d
  31. ", ::c); //指定访问左边域,空白表示全局域
  32. }

对部分常用的库里面的东西展开->针对1和2的折中方案,项目中也经常使用。

以上就是C++命名空间namespace怎么定义的详细内容,更多关于C++命名空间namespace怎么定义的资料请关注九品源码其它相关文章!