【C++】using namespace std 到底什么意思

2024-07-03 1302阅读

📢博客主页:https://blog.csdn.net/2301_779549673

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢本文作为 JohnKi 的学习笔记,引用了部分大佬的案例

📢未来很长,值得我们全力奔赴更美好的生活✨

【C++】using namespace std 到底什么意思

【C++】using namespace std 到底什么意思

文章目录

  • 📢前言
  • 🏳️‍🌈什么是 namespace
  • 🏳️‍🌈如何定义 namespace
    • ❤️定义
      • 嵌套
      • 融合
      • 🏳️‍🌈如何使用 namespace
      • 👥总结

        📢前言

        要建造简单的房屋,首先要打地基、搭框架。如果一开始没有牢固的结构,后面就很难建造窗子、门框、圆屋顶和镶木地板的舞厅等。同样,学习计算机语言时,应从程序的基本结构开始学起。只有这样,才能一步一步了解其具体细节,如循环和对象等。

        这篇博客,笔者就介绍一下由 C语言 转到 C++ 时,我们第一个会遇到的语句即 using namespace std ,并着重介绍一下其中的含义和由来


        🏳️‍🌈什么是 namespace

        Namespace(命名空间)是在计算机科学中常见的概念,用于表示符号的命名范围或作用域。在编程中,命名空间通常用于避免命名冲突,即当多个库、模块或包中存在相同名称的变量、函数或类时,通过将它们放置在不同的命名空间中来区分它们。

        我们可以先看一下下面这块C语言的代码

        #define _CRT_SECURE_NO_WARNINGS 1
        #include
        #include
        int rand = 1;
        int main()
        {
        	printf("%d", rand);
        	return 0;
        }
        

        如果不存在什么命名问题的话,这里会出现的结果将是1,但是我们实操会发现出现重定义的错误提示

        【C++】using namespace std 到底什么意思

        为什么会出现?

        那是因为在stdlib.h库中也存在rand这个变量名

        因此

        在当项目量过大,项目人数过多时,时常会出现一些大佬们命名重复的情况,为了避免这个情况,于是就在C++中引用了namespace,用来存放和保证命名库不出错,解决命名冲突


        🏳️‍🌈如何定义 namespace

        ❤️定义

        定义语法:

        namespace N1
        {
        	//支持变量
        	int a = 1;
        	//支持函数
        	int fun()
        	{
        		return 1;
        	}
        	//支持结构体
        	struct S
        	{
        		int s;
        	};
        }
        

        我们通过 namespace + 命令空间名 + {} 在花括号中填入想要命名的变量就可以了

        基本上的类型都是支持的

        嵌套

        namespace N2
        {
        	int a = 1;
        	namespace N3
        	{
        		int b = 1;
        	}
        }
        

        不仅如此namespace是支持嵌套使用的,就比如这里在N2空间内我们又创建了一个N3的命名空间

        融合

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

        namespace N4
        {
        	int a = 1;
        }
        namespace N4
        {
        	int b = 2;
        }
        

        融合结果

        namespace N4
        {
        	int a = 1;
        	int b = 2;
        }
        

        🏳️‍🌈如何使用 namespace

        既然已经知道了namespace的定义方法,那自然需要知道如何使用了

        这里就可以介绍一下using namespace std的具体含义了

        这其实就是一个名为std的命名空间的直接使用,std可以看为C++语法的标准数据命名空间,就像C语言中的stdio.h一样,在C++中常使用的count,cin等都是出自于这个命名库中,C++标准库中的函数或者对象都是在命名空间std中定义的。

        我们使用using namespace std就相当于把C++标准库外壳拆除,因此就可以使用里面的对象和函数了

        • 这就是方法1直接使用,using namespace + 命名空间名
          #include
          namespace N 
          {
          	int a = 10;
          	int b = 20;
          }
          using namespace N;
          int main()
          {
          	printf("%d\n", a); // 正常打印
          	return 0; 
          }
          
          • 而方法2则是使用using将命名空间中成员引入,using + 命名空间名 + :: +成员名
            using N::b;
            int main()
            {
            	printf("%d\n", b);
            	return 0; 
            }
            

            这样如果仅仅是需要利用命名空间内的指定成员名直接这样引用就行了

            • 方法3就是命名空间名 + :: + 变量名

              这里可以引用一下全局变量和局部变量

              比如下面这个例子

              #include
              int a = 0;
              int main()
              {
              	int a = 1;
              	printf("%d\n",a);
              	return 0;
              }
              

              这部分代码没有出错,因为在指定作用域内,优先局部变量

              但如果我们要在这部分域内使用全局变量又该怎么做呢,就需要在变量名前加上::就行了

              #include 
              using namespace std;
              int a = 0;
              int main()
              {
              	int a = 1;
                  printf("访问局部变量(a):%d\n",a);
              	printf("访问全局变量(::a):%d\n",::a);
              	return 0;
              }
              

              那如果在C++中,有很多个命名空间呢,那就是用方法3命名空间名 + :: + 变量名了

              #include 
              using namespace std;
              int main()
              {
                  cout 
                  std::cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]