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

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

C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针