美文网首页
modern c++(4)-强类型枚举

modern c++(4)-强类型枚举

作者: RC_HT | 来源:发表于2019-08-13 21:05 被阅读0次

弱类型枚举(weakly typed enum)

一开始,由于C++的枚举类型来源于C,所以出于设计简单的目的,枚举类型只用来表示整型常量的一些名字。
语法:

enum Gender {
    MALE,
    FEMALE
};

这里MALE和FEMALE就是枚举值,由于枚举默认从0开始,并且后一位枚举值自动增加1,所以数值上就分别表示0和1。
但是弱类型枚举有几个缺点,一是枚举值没有限定作用域(unscoped),就是说同一作用域下两种枚举类型的同名枚举值会产生冲突:

enum Cup {
    SMALL
};

//重复定义SMALL,编译出错
enum Size {
    SMALL
};

//本来显示指明Cup::SMALL或者Size::SMALL是没有歧义的,但谁让最初设定可以不带类型使用枚举值,所以还没编译到这句,定义冲突就直接over了
Cup cup = SMALL;

二是枚举值可以隐式转换为整型变量,当然这一设定也是不好的

enum Number {
    ZERO
};

//正常编译
int n = ZERO;

强类型枚举(strongly typed enum)

为了修复以上缺陷,C++11引入了新的强类型枚举,只需要在枚举类型名前面加上class关键字即可,和弱类型枚举类型语法不冲突:

enum class Gender {
    MALE,
    FEMALE
};

//强类型枚举使用时必须指定属于哪一种枚举类型
Gender gender = Gender::MALE;

//转换为整型变量,必须使用显示转换
int n = static_cast<int>(Gender::MALE);

除此之外,强类型枚举还可以指定底层整型类型(若没有指定则默认为int,而弱类型枚举没有默认类型):

enum class Gender : long {
    MALE,
    FEMALE
};

所以以后写代码还是尽量用新的强类型枚举吧。

相关文章

  • modern c++(4)-强类型枚举

    弱类型枚举(weakly typed enum) 一开始,由于C++的枚举类型来源于C,所以出于设计简单的目的,枚...

  • C++ 永生

    C++ 11 标准发布以后,C++ 就进入了Modern C++的时代。Modern C++ 拥有更强的类型检测,...

  • 深入理解C++11核心编程(五)--提高类型安全

    强类型枚举 枚举:分门别类与数值的名字 枚举类型是C及C++中一个基本的内置类型,不过也是一个有点"奇怪"的类型。...

  • C++学习笔记(二)

    1 数据类型 枚举类型枚举类型枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干...

  • 枚举类型

    新学到的枚举类型 枚举类型是c/c++都有的一个类型以前从未注意到的类型如:

  • 【c++】枚举类型

    枚举类型的目的 1.枚举类型使代码更具可读性,理解清晰,易于维护 2.如果枚举符号和对应的整数值发生变化,只需修改...

  • C++枚举类型

    enum week { monday, tuesday, wednesday, thurs...

  • C++11新特性

    强类型枚举 在C++11之前,枚举类型全局可见,两种枚举之间不可以叫相同名称。而C++11中不同枚举类型内部不会互...

  • Item 1Understand template type d

    引子 模板类型推导是Modern C++特性auto的基础,但模板类型推导和auto类型推导有一些区别,具体看正文...

  • Effective Modern C++ 系列之 条款1: 理

    Effective Modern C++ 系列之 条款1: 理解模板型别推导 1. CPP模板类型推导 函数模板一...

网友评论

      本文标题:modern c++(4)-强类型枚举

      本文链接:https://www.haomeiwen.com/subject/orcijctx.html