c++命名空间

命名空间

​ 为什么提出命名空间,因为c语言在使用过程中如果涉及到多公司,多部门,多小组进行协作开发时,很容易差生问题:命名冲突

​ 如果都相同的情况下,当合并代码时,就会碰到bug

​ C语言解决方案:

//做约定		公司名_项目名_模块名_变量名
int google_num = 1;
int facebook_num = 1;

在c++中为了解决命名冲突的问题,使用了命名空间的机制,就是将一个模块或者组件的变量全部定义在一个命名空间内部,namespace中里面包含变量、函数、类、typedef,#define等。

namespace google{
	int num = 1;
    void printf(){
        
    }
}
namespace baidu{
    int num = 1;
    void printf(){
        
    }
}
命名空间有三种使用方式:
  • 作用域限定符 最精确
  • using申明机制 推荐使用
  • using编译指令
std::cin;			//每次使用cin都需要使用作用域限定符
using std::cin;		//使用using申明机制,一次申明,多次使用
using google::printf();
using namespace std;	//将命名空间的所有变量引入到程序中

注意:一次性引入了std全部实体,在不清楚所有内容的情况下可能会产生命名冲突。

using namespace std;
void cout(){	//命名冲突
	//to DO
}
匿名空间:

匿名空间时特殊的命名空间,匿名空间的实体要避免与全局位置同名,如果同名,会优先找到全局变量,就算加::也访问不到,而匿名空间内的实体在逻辑上被丢弃了。

跨模块调用问题:

​ 1.全局变量和函数可以跨模块调用==> 使用extern关键字引入其他模块的变量和函数。注意只能作为摆布的引入申明,不能修改变量的值。

​ 2.静态变量和静态函数只能在本模块内部使用,完成信息隐藏

​ 3.匿名空间的实体无法跨模块调用, 否则报错:undefine reference to (anonymous namespace )::num3;

注意:
	有名空间跨模块调用时,要在定义一次有名空间,在空间中使用extern关键字引入需要的实体。

namespace google{
    extern void num;
    extern void printf();
}

void test0(){
    cout << google::num << endl;
    wd::printf();
}
命名空间是否只能定义一次?

​ 命名空间可以定义多次,在同一个模块中多次定义一个同名的命名空间,编译器认为时同一个命名空间,其中要避免变量重名。

​ 在多个模块中多次定义一个同名的命名空间,联合编译时也认为时同一个命名空间?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值