命名空间的引用方法

1. 同一文件内使用namespace

(1)namespace的三种引用方法

//方式一

ace::Mutex mutex;       

例如:                         

namespace NS1         
{
    void func2(void)
    {
        
    }
    void func1(void)
    {
        
    }

}
void func1(void);
int main(void)
{
    NS1::func1();             //用到一个声明一个
    return 0;
}

 

//方式二

using ace::Mutex;          //一次性只声明了指定命名空间里面的一个变量或函数

例子

namespace NS1
{
    void func2(void)
    {
        
    }
    void func1(void)
    {
        
    }

}
using NS1::func1;      //告诉编译器如果在默认的命名空间找不到func1可以到NS1中去找一下

int main(void)
{
    func1();
    return 0;
}

//方式三

using namespace ace;

Mutex mutex;

namespace NS1
{
    void func2(void)
    {
        
    }
    void func1(void)
    {
        
    }

}
using namespace NS1;           //一次性声明指定命名空间里面的所有变量函数等

int main(void)
{
    func1();
    return 0;
}

总结:第一种是用到哪个就去声明哪个,没有引入额外的负担,什么意思呢?using这里有点像include关键字,就是把整个文件拿过来在这里原地展开,假设include的包含的那个文件有700行,include这行代码就相当于把那700行的代码全部搂过来了,这种做法还是有一定开销的,对编译器的压力就比较大。

第二种只using进来一个符号,第三种把命名空间的所有符号全部都using进来了,从成本的角度来说,第一种到第二种到第三种的成本是依次递升,但是方便性是越来越好的。实战当中第一种和第三种用的比较多,第二种用的比较少。

 

2. 跨文件来使用namespace怎么声明?

namespace NS2{void func3(void);};                      //你有东西在另一个文件中,你要使用可以,但是你得先声明

namespace NS2{extern void func3(void);};          //namespace这种思想与要使用跨文件使用变量或函数是类似的

                                                                             //声明的时候不可以有实体,有实体就变成定义了

using namespace NS2;                                       //命名空间引用

 

3. 默认命名空间

默认命名空间就是没有放在特定命名空间里面的,C++中只有唯一的一个,就是main函数

int main(void)
{
    func3();
    return 0;
}

main函数必须放在默认空间里面的,不能放在特定命名空间里面的

(1)默认命名空间又叫全局命名空间

(3)默认命名空间里面引用其他命名空间的方法

就是上面提到的三种引用方法,

(4)默认命名空间引用自己的方法

与C语言的函数引用没什么区别

(5)其他命名空间引用默认命名空间的方法

void func5(void);      //函数的声明要放在引用它的命名空间之前,因为编译只会往前回顾,不会往后看的。  
namespace NS1
{
    void func2(void)
    {
        ::func5();     //表示func5定义和声明在默认命名空间,因为命名空间的名字是空的,所以冒号的前面是空的,

                           // 也可以省略双冒号,最好加上,不加的话给人的感觉func5()是NS1里面的

         //func1();   //如果是特定的命名空间内部访问自己的东西,前面什么都不用加
    }
    void func1(void)
    {
        
    }

};


//namespace NS2{void func3(void);};
namespace NS2{extern void func3(void);};

using namespace NS2;


int main(void)
{
    func3();
    return 0;
}

void func5(void) 
{
    
}

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值