C++--enum--枚举

发布时间:2024年01月22日

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;
}

文章来源:https://blog.csdn.net/m0_60274660/article/details/135757061
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。