栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第十六章:其他工具与技术(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第十六章:其他工具与技术(二)

枚举

枚举(enum) 是一种取值受限的特殊类型,具体的参考这里

enum Color{
    Red,				// 全局作用域
    Green,
    Yellow;
};

int main(){
	Color x = Red;
}

关于枚举,我们需要知道以下几点:

  • 分为无作用域枚举与有作用域枚举( C++11 起)两种
    enum class Color{
        Red,				// 有作用域枚举
        Green,
        Yellow;
    };
    
    int main(){
    	Color x = Color::Red;
    }
    
  • 枚举项缺省使用 0 初始化,依次递增,可以使用常量表达式来修改缺省值
  • 可以为枚举指定底层类型,表明了枚举项的尺寸
    enum Color : char		// 默认为int
    {
        Red,
        Green,
        Yellow;
    };
    
  • 无作用域枚举项可隐式转换为整数值;也可用 static_cast 在枚举项与整数值间转换
    enum class Color : char
    {
        Red,
        Green,
        Yellow
    };
    
    
    int main(){
        Color x = static_cast(0);
    }
    
  • 注意区分枚举的定义与声明
    enum class Color : int;			// 声明
    
    enum class Color				// 定义
    {
        Red,
        Green,
        Yellow
    };
    
联合

联合( union )用于将多个类型合并到一起以节省空间,关于联合我们需要注意以下几点:

  • 通常与枚举一起使用
    enum Type{				// 用于区分联合中当前使用的变量
        Int,
        Char
    };
    
    union Str{
        char x;
        int y;
    };
    
    struct S{
        Type t;
        Str obj;
    };
    
    int main(){
        S s;
        s.t = Char;
        s.obj.x = 'c';
    }
    
  • 匿名联合
    struct S{
        enum Type{
            Int,
            Char
        };
    
        union
        {
            char x;
            int y;
        };
    
        Type t;
    };
    
    int main(){
        S s;
        s.t = S::Char;
        s.x = 'c';
    }
    
  • 在联合中包含非内建类型( C++11 起)
嵌套类与局部类

嵌套类是在类中定义的类,关于嵌套类我们需要注意以下几点:

  • 嵌套类具有自己的域,与外围类的域形成嵌套关系,嵌套类中的名称查找失败时会在其外围类中继续查找
  • 嵌套类与外围类单独拥有各自的成员(非静态成员)

局部类是在函数内部定义的类,关于局部类我们需要注意以下几点:

  • 可以访问外围函数中定义的类型声明、静态对象与枚举
  • 局部类可以定义成员函数,但成员函数的定义必须位于类内部
  • 局部类不能定义静态数据成员
嵌套名字空间

关于嵌套名字空间,我们应该注意以下几点:

  • 名字空间可以嵌套,嵌套名字空间形成嵌套域
    namespace Out
    {
        namespace In{
            
        }
    }
    
  • 注意同样的名字空间定义可以出现在程序多处,以向同一个名字空间中增加声明或定义
  • C++17 开始可以简化嵌套名字空间的定义
    namespace Out
    {
    
    }
    
    namespace Out::In{
        
    }
    
匿名名字空间

关于匿名名字空间,我们需要注意以下几点:

  • 可用于构造仅翻译单元可见的对象
  • 可用 static 代替
  • 可作为嵌套名字空间
位域

位域用来显式表明对象尺寸(所占位数),具体的参考这里

struct A{
    bool b1 : 1;
    bool b2 : 1;
};

关于位域,我们需要注意以下几点:

  • 在结构体 / 类中使用
  • 多个位域对象可能会被打包存取
  • 声明了位域的对象无法取地址,因此不能使用指针或非常量引用进行绑定
  • 尺寸通常会小于对象类型所对应的尺寸,否则取值受类型限制
volatile关键字

volatile关键字的具体使用参考这里,关于volatile关键字,我们需要注意以下几点:

  • 表明一个对象的可能会被当前程序以外的逻辑修改
  • 相应对象的读写可能会加重程序负担
  • 注意慎重使用 一 —— 些情况下可以用 atomic 代替
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号