C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类相关的知识,希望对你有一定的参考价值。
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 特殊工具与技术)局部类的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数
C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配
C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI
C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid