zoukankan      html  css  js  c++  java
  • :: namespace using作用

    ::

    代表作用域 如果前面什么都不加 代表全局作用域

    例如:如下的std::cout代表的是全局作用域中的std作用域

    #include<iostream>
    int a=100;
    
    void func(int* x)
    {
        int* b = &a;
        *x = a;
        std::cout <<"x:"<< x<<std::endl;
        std::cout << "*x:" << *x << std::endl;
    }
    
    int main()
    {
        int b = 20;
        int* c = &b;
        func(c);
        std::cout << c << std::endl;
        std::cout << *c << std::endl;
    }

    namespace

    可以用来解决名称冲突

    namespace A
    {
        using namespace std;
        void func1()
        {
            std::cout << "I'm A" <<  endl;
        }
        
    }
    
    namespace B
    {
        using namespace std;
        void func1()
        {
            cout << "I'm B" << endl;
        }
    }
    void func2()
    {
        A::func1();
        B::func1();
    }

     命名空间可以存放变量、函数、结构体、类等,可以嵌套命名空间

    namespace C
    {
        using namespace std;
        int A_a = 10;
        namespace CB
        {
            int A_a = 20;
        }
        void func1()
        {
            cout << "A_a:" << A_a << endl;
            cout << "CB::A_a:" << CB::A_a << endl;
        }
    }

     命名空间是开放的,可以随时将新成员添加到命名空间下

    namespace C
    {
        using namespace std;
        int A_a = 10;
        namespace CB
        {
            int A_a = 20;
        }
        void func1()
        {
            cout << "A_a:" << A_a << endl;
            cout << "CB::A_a:" << CB::A_a << endl;
        }
    }
    
    namespace C
    {
        int A_b = 50;
        void func2()
        {
            cout <<"A_b:" <<A_b << endl;
        }
    }
    
    void func2()
    {
        C::func2();
    }

    当写的命名空间为匿名的,相当于给其加上了static关键字

    namespace
    {
        int AB_b=10;
        int AB_a=20;
    }
    
    void func2()
    {
        std::cout << "AB_b:" << AB_b <<std::endl;
        std::cout << "AB_a:" << AB_a <<std::endl;
    }

     命名空间可以起别名

    namespace C
    {
        int A_b = 50;
        void func2()
        {
            cout <<"A_b:" <<A_b << endl;
        }
    }
    void func2()
    {
        namespace MySpace = C;
        MySpace::func2();
    }

     using

    当using声明与就近原则同时出现,就会出错,类似于如下这种情况,这相当于声明了多次,编译器不知道用谁了

     

     using编译指令与就近原则同时出现,优先使用就近

    namespace C
    {
        int A_b = 50;
        int test = 50;
        void func2()
        {
            cout <<"A_b:" <<A_b << endl;
        }
    }
    void func2()
    {
        int test = 20;
        using namespace C;
        cout << test << endl;
    }

  • 相关阅读:
    练习四十:数组逆向输出
    练习三十九:数组插入排序
    Java awt组件间的继承关系
    java ArrayList
    java Scanner中的hasNext()方法
    java中String对象的存储位置
    java初始化块执行顺序
    java二维数组
    java数组变量
    Java数组初始
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14214977.html
Copyright © 2011-2022 走看看