首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >EasyC++54,名称空间其他特性

EasyC++54,名称空间其他特性

作者头像
TechFlow-承志
发布2022-08-26 17:22:01
发布2022-08-26 17:22:01
3790
举报
文章被收录于专栏:TechFlowTechFlow

作者 | 梁唐

大家好,我是梁唐。

这是EasyC++系列的第54篇,继续聊聊名称空间的特性。

名称空间其他特性

嵌套

我们可以将名称空间声明进行嵌套:

代码语言:javascript
复制
namespace elements {
    namespace fire {
        int flame;
        ...
    }
    float water;
}

我们观察一下可以发现这里的flame位于elements::fire当中,所以当我们使用解析运算符使用它的时候写成:elements::fire::flame

同样,我们也可以使用using编译指令引入fire名称空间:

代码语言:javascript
复制
using namespace elements::fire;

传递

并且我们还可以把using编译指令和using声明应用在名称空间当中:

代码语言:javascript
复制
namespace myth {
    using Jill::fetch;
    using namespace elements;
    using std::cout;
    using std::cin;
}

假设我们要访问Jill::fetch,由于它已经被引入myth当中了,所以我们可以这样访问:

代码语言:javascript
复制
std::cin >> myth::fetch;

并且using编译指令是可以传递的,A 引入了B,B引入了C,等价于A也引入了C。比如当我们运行using namespace myth;,由于myth当中引入了elements,等价于同时运行了这两条:

代码语言:javascript
复制
using namespace myth;
using namespace elements;

别名

我们还可以给名称空间创建别名,例如:

代码语言:javascript
复制
namespace my = myth::elements::fire;
using my::flame;

在上面这个例子当中,我们将别名和名称空间的嵌套结合在了一起使用。其实有一点像是将名称空间当成是一种特殊变量处理的感觉。

匿名名称空间

我们还可以省略名称空间的名称来创建匿名名称空间。

代码语言:javascript
复制
namespace {
    int ice;
    int bandy;
}

它相当于后面跟着using编译指令一样,也就是说匿名的名称空间的潜在作用域为从声明点到该声明区域末尾。从这点来看,它与全局变量相似。但由于它是匿名的,所以无法在其他文件当中使用using关键字引入,所以不能在其他文件使用,某种意义上有些类似于链接性为内部的静态变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 名称空间其他特性
    • 嵌套
    • 传递
    • 别名
    • 匿名名称空间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档