Using的使用方法

1,命名空间的使用

  • 为了防止代码冲突,都会使用到命名空间。假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分他们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。
  • 同样的情况也出现在 C++ 应用程序中。例如,可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断所使用的是哪一个 xyz() 函数。 因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。 我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

  • 比如 namespace sdf;
  • 在编码的时候还可以使用sdf::加具体的类方法,也可以使用using namespace sdf;

不连续的命名空间

  • 命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。 所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:
namespace namespace_name {// 代码声明
}

嵌套的命名空间

  • 命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:
namespace namespace_name1 {// 代码声明namespace namespace_name2 {// 代码声明}
}
  • 可以通过使用::运算符号来访问嵌套的命名空间中的成员

2,在子类中引用基类的成员

class T5Base {
public:T5Base() {}virtual ~T5Base() {}static void test1() { std::cout << "T5Base test1..." << std::endl; }//protected:
//    static int T5Base::value = 9;
};class T5Derived :T5Base {
public:using T5Base::test1;
//    using T5Base::value;
//    void test2() { std::cout << "value is " << value << std::endl; }
};//主函数
T5Derived::test1();
  • 基类中的成员变量是public的,但是在private继承之后,对于外界这个数值就是private的,也就是T5Derived无法使用这个value;这个时候需要使用using T5Base::test1就可以使用了。
  • 上面的value,我没有改对,有会的小伙伴可以教教我
  • using只是引用,不参与形参的指定

3,别名的指定

  • 在C++11中,提出了使用using指定别名,using value_type = Ty;那么以后使用value_type的地方就代表使用了Ty
  • 这种使用的方法类似于typedef,那么二者之间的区别在于什么地方呢?

例如

  • typedef std::unique_ptr<std::unordered_map<std::string, std::string>> UPtrMapSS;
  • using UPtrMapSS = std::unique_ptr<std::unordered_map<std::string, std::string>>;

但是别的更加复杂的场景会让你觉得使用using会更加简单一些

  • typedef void (*FP) (int, const std::string&);

  • 如果不熟悉指针和typedef,很难看出FP是一个别名,代表着一个函数指针,而指向函数的返回类型是void,接受的参数是int、const std::string &;
  • 如果使用C++11,using FP = void (*) (int, const std::string&);Fp是一个别名,using将别名的名字放在了左边,而将别名指向了右边,简单清晰

using可以实现但是typedef不可以使用 alias templates, 模板别名

  • template <typename T>
  • using Vec = MyVector<T, MyAlloc<T>>;
  • // usage
  • Vec<int> vec;

参考链接

  • C++ 中using 的使用

C++ using的三种使用策略以及具体的用法相关推荐

  1. Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

    摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...

  2. 会员营销中,沉寂会员的三种运营策略

    在会员营销中,企业主要做的主要有两件事情,第一件事情就是想办法将用户转化成企业会员:第二件事就是将会员进行转化,达成企业收益提升以及用户增长的目的,这就是开展企业会员营销时企业需要做的两件事情,这两件 ...

  3. Hibernate的三种检索策略

    1 N+1问题 Hibernate的Session缓存中存放的是相互关联的对象图,默认情况下,当从数据库中加载一个对象的时候,会同时加载它所关联的其他对象.例如:Clazz(班级)跟Student(学 ...

  4. 数据库恢复技术(事物、三种更新策略以及恢复策略)

    数据库恢复技术(事物.三种更新策略以及恢复策略) 数据库恢复所要达到的目标 数据库为了达到目标的恢复策略 事务和日志的基本内容 事务的基本内容 日志的基本内容 更新数据库规则和三种更新策略 数据库更新 ...

  5. 信贷风控的三种模型策略体系

    互联网金融浩浩荡荡不过十载,时间上看虽然不长,但从影响上规模上不可不谓之巨变.这一点从名字上就可以看出来,广为人知的是互联网金融,而不是曾经许多专家学家们激烈争论的金融互联网.传统金融互联网化实在不足 ...

  6. 负载均衡方案的三种实现策略

    早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求.随着现在互联网的流量越来越大,稍微好一点的系统,访问量就非常大了,并且系统功能也越来越复杂,那么单台服务器就 ...

  7. Azure数据仓库表中的数据经常使用的三种分布策略(hash、round_robin 或 replicated)简介

    目录 (一)前言 (二)基础概念 1. Azure Synapse Analytics概念 2. Synapse SQL 体系结构组件 3. Azure 存储 4. 控制节点 5. 计算节点 6. 数 ...

  8. Redis进阶-Redis对于过期键的三种清除策略

    文章目录 Pre Redis Key的超时设置处理 被动删除 主动删除 当前已用内存超过maxmemory限定时,触发主动清理策略 总结 Pre Redis-17Redis内存回收策略 Redis K ...

  9. 三种缓存策略分析:Cache aside,Read/Write through,Write Back

    Cache aside 旁路缓存,旁路缓存操作逻辑是查询缓存,如果不存在那么就读取数据库并更新到缓存当中. 如果是更新数据库,那么操作完数据库后,删除缓存. 注意旁路缓存,缓存中的内容是不做更新操作的 ...

最新文章

  1. [软件推荐]电子日记本EDiary,记下您 的每一天
  2. php jquery教程下载,jquery怎么下载和引用
  3. Rundll32.exe文件详解(显示我的电脑 取消自动登录)
  4. 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?...
  5. 权威公布:彻底搞清楚哪些笔记本和台式机主板能够支持42mm SATA M.2 NGFF(2242)接口的固态硬盘!!!...
  6. Storm Bolt接口
  7. 拿什么保护你,我的区块链
  8. java天气预报webservice_webservice之实现天气预报
  9. 知乎上已获千赞,全网独家首发!
  10. ubuntu登陆死循环(全是搜狗拼音的锅!!!!!!!!!!!)
  11. UVA12279 LA4853 Emoogle Balance【水题】
  12. windows phone 8.1 让项目开启蓝牙genericAttributeProfile
  13. keil5 项目管理
  14. Percentile和Quartile
  15. H5横幅,旗帜飘动动画
  16. STM32外部引脚电路个人总结
  17. Office 2010 博文征集开始 - 抢先下载 抢先得奖
  18. jQuery选择器(二)
  19. python绘制蟒蛇_Python实现七彩蟒蛇绘制实例代码
  20. 当今计算机科学发展趋势,探索计算机科学与技术的发展趋势

热门文章

  1. linux arp 文件,LINUX 下ARP 的查找
  2. linux c++ queue 多线程,C++多线程,消息队列用法
  3. 第八节: EF的性能篇(一) 之 EF自有方法的性能测试
  4. vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)
  5. java流换行符方法_java换行符的使用方法
  6. 【Python CheckiO 题解】Sort Array by Element Frequency
  7. python面向对象编程的语言_怎么使用python面向对象编程
  8. 【2018icpc宁夏邀请赛现场赛】【Gym - 102222H】Fight Against Monsters(贪心排序)
  9. 【qduoj - 纳新题】凑数题(恰好装满类0-1背包 或 母函数)
  10. Coursera自动驾驶课程第18讲:The Planning Problem