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。

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

  • 相关阅读:
    csp-2020-s游记
    线性DP
    tarjan无向图
    tarjan有向图
    树前置知识普及
    hash
    可持久化线段树&主席树
    [HAOI 2015] 树上染色
    [Contest on 2020.11.24] Beetle
    [Contest on 2020.11.24] Candy
  • 原文地址:https://www.cnblogs.com/953-zjf/p/namespace.html
Copyright © 2011-2022 走看看