一起学习交流~

c/c++细节知识点 09enum和enumclass

c++面试准备 laomuji 1个月前 (08-18) 86次浏览 已收录 0个评论

目录

作用

/*
enum
弱安全检查,每个枚举值是数字,允许不同的枚举类型进行比较,可以隐式的转换为int
非限定作用域,很可能会污染外部作用域
没有规定默认的底层实现,由编译器实现,只要能装下最大的枚举值即可

enum class
强类型检查,虽然枚举值也是数字,但不允许不同的枚举值进行比较,必须显式的转换为int
限定作用域,解决enum的污染问题
规定默认的实现为int类型
*/

用法

#include<iostream>
using namespace std;

//enum重复定义问题
enum Enum9_1_a {AA,BB};
//enum Enum9_1_b {AA,BB};//AA和BB重定义,以前的定义是枚举数
//int AA = 123;//A重定义,以前的定义是枚举数

enum Enum9_1_C { CC, DD };

//enum并没有明确规定底层的实现,可能会被编译器优化,比如没有负数可能是无符号类型,可以手动指定底层实现
enum Enum9_1_D : short {
    a, b, c = 123, d
};

//enum class无重复定义问题
enum class Enum_Class_9_1{
    AAA,BBB,CCC
};
enum class Enum_Class_9_2 {
    AAA, BBB, CCC
};

//enum class name 等同于 enum class name : int ,默认实现是int,也可以手动指定底层实现
enum class Enum_Class_9_3 : int {
    AAA, BBB, CCC = BBB, DDD
};

int main9_1() {
    if (AA > CC) {}//不同类型的enum可以比较,不安全
    //AAA //在enumclass外部必须使用范围解析运算符::来使用enum class
    //if (Enum_Class_9_3::AAA > Enum_Class_9_2::BBB) {}//不同类型的enum class不可以比较,安全
    if (Enum_Class_9_3::AAA > Enum_Class_9_3::BBB) {}//相同类型的enum class可以比较

    return 0;
}
喜欢 (1)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论