using在c++中的用法_c++ using和typedef

1、简化了命名空间的成员访问

    namespace veryLongName {
        int a=100;
        void func(){cout<<"hello namespace"<<endl;}
    }
    void test07()
    {
 
        //使用veryLongName命名空间
        using namespace veryLongName;
 
        //出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
        cout<<"a = "<<a<<endl;
        func();
    }
 

2、using 使用整个命名空间

    namespace veryLongName {
        int a=100;
        void func(){cout<<"hello namespace"<<endl;}
    }
    void test07()
    {
        int a=200;
        //使用veryLongName命名空间
        using namespace veryLongName;
 
        //出现的变量 从当前作用寻找a,如果找不到在从veryLongName命名空间中找
        cout<<"a = "<<a<<endl;//访问的是局部变量中的a
        cout<<"a = "<<veryLongName::a<<endl;//访问的是veryLongName的a
        func();
    }

3、using 指明使用命名空间中的具体成员。(了解)

注意:using直接使用 命名空间中的成员 会和 局部变量冲突

注意:using直接使用 命名空间中的成员 不会和 全局变量冲突

    namespace veryLongName {
        int a=100;
        void func(){cout<<"hello namespace"<<endl;}
    }
    int a = 200;
    void test07()
    {
        //using直接使用 命名空间中的成员 不会和 全局变量冲突
        using veryLongName::a;
 
        cout<<"命名空间中a = "<<a<<endl;//命名空间中的成员 100
        cout<<"全局变量中a = "<<::a<<endl;//200
 
        //但是func使用的时候 必须加作用域
        veryLongName::func();
    }

4、using声明碰到函数重载(了解)

    namespace A {
        //函数重载 函数名+参数 组合代表是函数的入口地址
        void func(){cout<<" 无参的func"<<endl;}
        void func(int a){cout<<" int的func"<<endl;}
        void func(int a,int b){cout<<" int int的func"<<endl;}
    }
 
    void test08()
    {
        //using指明 使用 A中的func 会对 所有的func起作用
        using A::func;
        func();
        func(10);
        func(10,20);
    }

运行结果:

5、不同命名空间中的 同名成员 使用的时候注意 二义性

    namespace A {
        int a = 10;
    }
    namespace B {
        int a = 20;
    }
    void test09()
    {
        //此处的a 不知道是A还是B中a
        //cout<<"a = "<<a<<endl;//err
 
        //解决方法
        cout<<"A::a = "<<A::a<<endl;//100
        cout<<"B::a = "<<B::a<<endl;//200
    }

总结:

1、命名空间的定义( 不能在 函数内 定义命名空间)
2、使用命名空间的成员 最安全的方式 命名空间名::成员名
3、using namespace 命名空间名;使用整个命名空间 (重要)
using namespace A;
4、单独 使用命名空间中的具体成员:using 命名空间名::成员名;
using A::a;

原文链接:,转发请注明来源!