1. 局部类 ( local class)

局部类的所有成员( 包括函数在内 ) 都必须完整定义在类的内部。 因此, 局部类的作用与嵌套类相比相差很远

  • 在局部类中不允许声明静态数据成员
  • 局部类不能使用函数作用域中的变量

局部类只能访问外层作用于定义的类型名、静态变量以及枚举成员。

如果局部类定义在某个函数内部, 则该函数的普通局部变量不能被该局部类使用

int a, val;
void foo(int val)
{static int si;enum Loc { a = 1024, b };// Bar是foo的局部类struct Bar {Loc locVal;int barVal;void fooBar(Loc l = a){barVal = val;    // 错误, val是foo的局部变量barVal = ::val;  // 正确: 使用一个全局变量barVal = si;     // 正确: 使用一个静态局部对象locVal = b;      // 正确: 使用一个枚举成员}};// ...
}

1.1 常规的访问保护规则对局部类同样适用

外层函数对局部类的私有成员没有任何访问特权。 当然, 局部类可以将外层函数声明为友元: 或者更常见的情况是局部类将其成员声明成公有的。

1.2 局部类中的名字查找

局部类内部的名字查找次序与其他类相似。 在声明类的成员时, 必须先确保用到的名字位于作用域中, 然后再使用该名字。

定义成员时用到的名字可以出现在类的任意位置。如果某个名字不是局部类的成员, 则继续在外层函数作用域中查找; 如果还没有找到, 则在外层函数所在的作用域中查找

1.3 嵌套的局部类

可以在局部类的内部再嵌套一个类,嵌套类的所有成员都必须定义在嵌套类内部

void foo ( )
{class Bar {public://...class Nested; // 声明Nested类};//定义Nested类class Bar::Nested {//...}
}

C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类相关推荐

  1. C++ Primer 5th笔记(chap 19 特殊工具与技术)异常类层次

    1. 类 exception . bad_cast 和 bad_alloc 定 义 了 默 认 构 造 函 数 runtime_error 和 logic_error没有默认构造函数, 但是有一个可以 ...

  2. C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid运算符

    1. typeid运算符(typeid operator) 它允许程序向表达式提问:你的对象是什么类型? typeid表达式的形式是typeid(e),其中e可以是任意表达式或类型的名字,它操作的结果 ...

  3. C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI

    1. 运行时类型识别(run-time type identification ) 当我们将这两个运算符用于某种类型的指针或引用, 并且该类型含有虚函数时, 运算符将 使用指针或引用所绑定对象的动态类 ...

  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类

    1. type_info 的操作 操作 描述 t1 == t2 如果type_info对象t1和t2表示同一种类型,则返回true t1 != t2 如果type_info对象t1和t2表示不同的类型 ...

  5. C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid

    1. 通常情况下使用 typeid 比较两条表达式的类型是否相同或者比较一条表达式的类型是否与指定的类型相同 Derived *dp = new Derived; Base *bp = dp; // ...

  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI

    1. RTTI用处 当想为具有继承关系的类实现相等运算符时.对于两个对象来说,如果他们的类型相同并且对应的数据成员取值相同,则我们说这两个类是相等的. class Base {friend bool ...

  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)定位 new 表达式

    1. 定位 new (placement new) 1.1 起因 内存分配和初始化分离开 Placement new allows you to construct an object in memo ...

  8. C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数

    void *operator new (size_t size) {if (void *mem = malloc (size) )return mem;elsethrow bad_alloc ( ); ...

  9. C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配

    1. new void operator new (size_t, void ) ;//不允许重新定义这个版本 string *sp = new string("a value") ...

  10. C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“

    1. C++程序有时需要调用其他语言编写的函数, C++使用链接指示( linkage directive)指出任意非 C++函数所用的语言 1.1 声明一个非C++函数 // 可能出现在 C++头文 ...

最新文章

  1. 冠军方案分享:ICPR 2020大规模商品图像识别挑战赛冠军解读
  2. ASP.NET获取客户端、服务器端基础信息集合
  3. boost::mp11::mp_min相关用法的测试程序
  4. 产业数字化升级进入深化期,腾讯智慧出行释放“数字底座”核心能力
  5. can帧格式 dlc_【图片】CAN扩展帧结构【汽车can总线吧】_百度贴吧
  6. 信息学奥赛C++语言:三位数的翻转
  7. [置顶] 火车票余票接口API使用方法
  8. php pg connect 扩展,php安装gnupg扩展
  9. Algs4-1.3.10中序表达式转为后序表达式(第二次实现)
  10. Android源码下载(包括最新8.0版本)
  11. 1043 : 最大值
  12. 计算机启动太慢的原因是,电脑启动慢的原因分析
  13. 数据库高并发解决方案(二)部署优化
  14. 图像压缩编码——香农/哈夫曼编码
  15. 计算机配置中什么表示硬盘,电脑硬盘的分类介绍 硬盘中的Master和Slave代表什么意思...
  16. 闲鱼如何保障交易链路质量
  17. VS2013如何生成exe文件以及如何更改exe程序图标
  18. XJOI 循环-分解质因式
  19. Python : UnicodeEncodeError: 'gbk' codec can't encode character '\u200b' in position
  20. uniapp android 调用原生 文件管理

热门文章

  1. IDEA中实用的快捷方式
  2. vant coupon 时间戳如何计算_计软考研双日练 | 如何计算拓扑排序算法的时间复杂度?...
  3. 皖南医学院2020C语言试卷,安徽继续教育在线 - 皖南医学院
  4. 工信部等六部门公布2021年度国家绿色数据中心名单
  5. 数据中心未来将向“四高”演进
  6. 数据中心发电机组的选择及控制
  7. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
  8. 成功解决ValueError: cannot assign without a target object
  9. DL之SqueezeNet:SqueezeNet算法的架构详解
  10. DL之DeepLabv1:DeepLabv1算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略