zoukankan      html  css  js  c++  java
  • C++之局部类

      局部类,我个人在平时的编程中真的没有用过,其实也不懂,最近想再打牢C++基础重翻了《C++ primer》才看到局部类这一名词,通过“局部”一词联想到局部变

    量,能大概猜测局部类是个什么东东。书中定义为:定义在某个函数内部的类,称为局部类。局部类定义的类型只能在定义该类的作用域中可见。局部类的所有成员变

    量以及成员函数必须完整定义在类的内部。因为要全部定义在类的内部,好像感觉是内联哈(其实具体实现我也不太清楚),这就导致我们的局部类中的函数定义不

    能复杂,不然在函数中定义类还那么复杂其可读性就很差了,另外需要注意的是在局部类中不能声明静态数据成员

      局部类的访问权限受到很多限制,局部类只能访问外层作用域定义的类型,静态变量以及枚举成员。如果局部类定义在某个函数的内部,那么该函数的普通局部

    变量不能被该局部类使用

    int val = 100;
    void foo(int val)
    {
        static int si;
        enum loc { a = 1024, b };
        int m = 0;
    
    struct Bar { loc locVal; int BarVal; void BarTest() { BarVal = val;//错误:val为foo的局部变量 BarVal = m;//错误:m也为foo的局部变量 BarVal = ::val;//正确:使用了全局变量 BarVal = si; BarVal = loc::b;//使用枚举成员 } }; }

      外层函数对局部类的私有成员没有任何访问权限,我们可以将外部函数声明为友元,然而更多的时候将其成员声明为公有的。局部类也是可以嵌套的,嵌套类的定

    义可以在局部类的之外,但是其定义要和局部类在一个作用域内!

    int val = 100;
    void foo(int val)
    {
        static int si;
        enum loc { a = 1024, b };
        int m = 0;
    
        struct Bar
        {
            class InsideClass;//声明InsideClass类
        };
    
        class Bar::InsideClass//定义InsideClass类
        {
            //....
    
        };
    }

    需要注意的是,嵌套类也是局部类,必须遵循局部类的规定,嵌套类的成员也必须定义在嵌套类内部

  • 相关阅读:
    微信小程序中的WXS语法
    小程序 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内
    Linux 远程连接sftp与ftp
    MySQL使用方法
    Rsync+Inotify实时同步环境部署
    inotify+rsync实时同步
    rsync备份
    C# 基于ef的2种简单的仓储封装和工作单元 net core3.1 ---sqlserver 2019
    xshell个人免费版下载使用
    Git 命令之 git add、git commit
  • 原文地址:https://www.cnblogs.com/chmm/p/7469618.html
Copyright © 2011-2022 走看看