C++--enum--枚举

本文详细介绍了C++中的枚举类型,包括不限定作用域与限定作用域的枚举、枚举元素的定义与赋值,以及如何在switch语句中使用枚举。还讨论了指定枚举常量底层类型的选项。
摘要由CSDN通过智能技术生成

C/C++枚举类型:

不限定作用域的枚举类型


关键字:enum
声明枚举类型,然后可以用枚举类型来定义变量(如同结构体):
enum Color{white,black,yellow};
{注意分号}
Color color_type;
color_type 变量的值只限于枚举类型Color中的值

枚举类型中的元素称为:枚举元素或者枚举常量

也可以不用声明枚举类型名,直接定义枚举变量:
enum{white,black,yellow}color_type;

注意
1枚举常量是常量,不能在枚举常量列表之外的地方对枚举类型中的枚举常量赋值。
2:每一个枚举常量都代表一个整数,如果声明时没有给枚举常量赋值,则默认从0开始,往后逐渐加1。如果某个元素被指定值,往后的又逐渐加1.
eg:
enum num{n1,n2=4,n3,n4,n5=10,n6};
则:n1=0,n3=5,n4=6,n6=11 。
3:枚举元素不要重复,重复就没有意义了。

4,枚举类型如果在头文件的类中定义,在源文件作为函数返回类型时,必须用作用域运算符指定,否则就是未定义。

5,可以定义枚举类型的变量,也可以用枚举元素给变量赋值。(HTTP请求方法获取)

枚举和switch

枚举虽然可以用在switch中,语法不会保错,但是因为枚举变量的值都是枚举类型,所以switch中的所有枚举选项尽管值不相等,但是类型相同,都会比较成功而被执行。

所以同一个枚举常量的值放在一个switch中比较毫无意义

限定作用域的枚举类型

enum class/struct{};

链接

作用:

1,限定作用域,防止命令冲突;

2,防止隐式类型转换;

switch语法

其实,不管限定作用域枚举还是不限定作用域枚举,甚至普通数据类型,只要成功匹配到目标结果,如果不退出,下面的结果都将匹配成功。

#include <iostream>

using namespace std;

enum class ELanguage {
    kCHINESE,
    kENGLISH,
    kKOREAN
};
enum color {
    whilte,
    black,
    gray
};

int main() {
    switch (100) {
    case 10:cout << 10 << endl;
    case 100:cout << 100 << endl;
    case 1000:cout << 1000 << endl;
    default:
        break;
    }
    ELanguage language = ELanguage::kCHINESE;
    switch (language) {
    case ELanguage::kCHINESE:
        std::cout << "chninese" << std::endl;
    case ELanguage::kENGLISH:
        std::cout << "english" << std::endl;
    case ELanguage::kKOREAN:
        std::cout << "korean" << std::endl;
    default:
        break;
    }
    color c1 = whilte;
    switch (c1) {
    case whilte: 
        cout << "whilte=" << whilte << endl;
    case black: 
        cout << "black=" << black << endl;
    case gray: 
        cout << "gray=" << gray << endl;
    default:
        break;
    }
    return 0;
}

指定枚举常量的类型

enum class ETest: unsigned{}

- :unsigned:指定枚举类型的底层类型为 unsigned。枚举类型也可以使用 int、short 等整数类型作为底层类型,如果不指定底层类型,则默认使用 int。

enum class ETest:unsigned{
....
}
using enum ETest;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值