zoukankan      html  css  js  c++  java
  • Linux C/C++——命名空间

      命名空间

      在学习命名空间之前,我们先引入一个在C语言中不存在的运算符——(::),冒号运算符,在日常开发中我们可能会遇到很多变量,那怎么保证每一个变量名都不一样呢?而且我们也没办法保证不跟头文件里包括的变量相冲突呢?于是C++中就引入了冒号运算符。首先,让我们来看一段代码

    #include<iostream>
    using namespace std;
    int a = 100;  //定义一个全局变量
    void func()
    {
        int a = 10;  //定义一个局部变量
        cout<<a<<endl; 
        cout<<::a<<endl;
    } 
     int main(int argc, const char** argv) 
    {
        func();
        return 0;
    }

    我们来分析一下这段代码,很明显,在func()函数里第一个a会输出10,因为就近原则嘛,那我们如果我们要用定义的那个全局变量a怎么办呢?这时候就要用到冒号运算符了,在变量a前面加上::,我们看下运行结果:

    这就是冒号运算符的作用,如果在冒号运算符前什么都不加的话,则默认为全局变量,当然还可以加别的命名空间。

      这里我们先举个例子:假如说现在同一辅导员手下带的班里有两个人叫小明,但他们不属于同一个班,如果说辅导员要找小明,是不是就有点冲突了,于是就想了一个办法,给他们加上班级来以示区分,于是就成了A班小明和B班小明。在C++中就是如此,用namespace来开辟两个不同的空间来存放名字相同的变量,在引用该变量时,只要加上空间名就可以了,接下来,上代码。

    #include<iostream>
    using namespace std;
    namespace A{
        int a = 100;
    }
    namespace B{
        int a = 10;
    }
    void test01(){
        cout<<A::a<<endl;
        cout<<B::a<<endl;
    }
    int main(int argc, const char** argv) {
        test01();
        return 0;
    }

    看下运行结果:

    可以看到,我们输出了相同变量名的不同值。但我们一定要注意,命名空间一定要定义在全局变量内,否则会报错。

      另外命名空间还有以下特点:

    1. 命名空间可以重名,后来的命名空间就是对前面命名空间的补充。通过上面截图我们可以看到,在定义了两个B,一个中含a,一个中含b,在后面引用B的时候,就会自动多了b这个变量,就是后面再定义跟之前命名空间一样的,就会作为前面的一个补充。
    2. 命名空间内可以定义变量、函数、结构体和类。

      3.命名空间可以嵌套,比如说在我们定义的B中定义一个C,接下来我们要用C中的成员时就需要先引用B再引用C。

      好了,今天就先写到这里,我们就先简单了解一下命名空间,后面等深入了解了再讲。

  • 相关阅读:
    spring cloud 和 阿里微服务spring cloud Alibaba
    为WPF中的ContentControl设置背景色
    java RSA 解密
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    Hystrix 配置参数全解析
    spring cloud 2020 gateway 报错503
    Spring Boot 配置 Quartz 定时任务
    Mybatis 整合 ehcache缓存
    Springboot 整合阿里数据库连接池 druid
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
  • 原文地址:https://www.cnblogs.com/953-zjf/p/namespace.html
Copyright © 2011-2022 走看看