C++入门级教程:我将告诉你有关域的一切

一、域的特性以及区别

同域不能定义同名的变量,但不同的域可以。
域能影响访问,也能影响生命周期。
几种常见的域:类域、命名空间域、局部域、全局域。 

其中局部域和全局域会影响生命周期,类域和命名空间域不会影响生命周期。  
在C++中,如果想访问全局域,则需要使用::(域作用限定符)
注:默认先从局部搜索,若局部没有,则全局搜索,如果两个都存在,则访问全局域时,要使用::(域作用限定符)

#include<stdio.h>
#include<stdlib.h>

int a = 1; //全局域

namespace Galaxy
{
    int a1 = 3;
}

using namespace Galaxy; //展开命名空间域(默认向上查找)

namespace Star
{
    int a = 2; //命名空间域
}

int main()
{
    int a = 0; //局部域
    printf("%d\n",a); //访问局部域
    printf("%d\n",::a); //访问全局域
    printf("%d\n",Star::a); //指定访问命名空间域
    printf("%d\n",a1);
    return 0;
}

二、域的优先级

1、局部域—>全局域—>展开命名空间域or指定访问命名空间域(默认:不指定是不会去命名空间域搜索的)
注:若展开了命名空间域,则该命名空间域暴露于全局,若与原全局域中变量同名,则不能同时存在。直接展开会有风险,我们定义如果跟库重名就报错,建议项目里面不要展开。项目建议指定访问,不要轻易展开命名空间。
2、常见误区:展开命名空间域≠include
include指在预处理阶段将include中的内容展开(类似拷贝)
而展开命名空间域是指,编译时去命名空间中搜索(相当于把墙拆了)

三、命名空间域
1、命名空间可以定义变量/函数/类型。
2、命名空间可以嵌套。
3、不同头文件中的相同命名空间可以合并。
4、调用命名空间的三种方式:
      a.全部展开命名空间域
      b.指定访问
      c.指定展开(某个命名空间域)




 

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值