首页 > 编程语言 >C++ 中的enum 和 enum class

C++ 中的enum 和 enum class

时间:2024-11-10 22:12:31浏览次数:1  
标签:Color enum C++ 枚举 类型 class Red

在 C++ 中,enum 和 enum class 都用于定义枚举类型,但它们在使用时有一些关键区别。主要区别在于作用域和类型安全性:

1. 作用域enum class 是强作用域的,而 enum 是弱作用域的。

  • enum class(强作用域枚举):枚举值需要使用枚举类型的名称进行限定。例如:

    enum class Color {
        Red,
        Green,
        Blue
    };
    
    Color color = Color::Red; // 必须加上 "Color::"
    
  • enum(弱作用域枚举):枚举值直接引入到当前作用域中,可以直接使用枚举值而不需要加类型限定。

    enum Color {
        Red,
        Green,
        Blue
    };
    
    Color color = Red; // 不需要加 "Color::"
    

2. 类型安全性enum class 提供类型安全,而 enum 不提供。

  • enum class:定义的枚举类型不会隐式转换为整数类型,这样可以防止意外的类型混用。

    enum class Color {
        Red,
        Green,
        Blue
    };
    
    int colorInt = Color::Red; // 错误:不能隐式转换为整数类型
    
  • enum:可以隐式地转换为整数类型,这样虽然使用方便,但也会带来类型安全性问题。

    enum Color {
        Red,
        Green,
        Blue
    };
    
    int colorInt = Red; // 正确:隐式转换为整数
    

3. 底层类型指定:两者都可以指定底层类型,但 enum class 支持更灵活的类型定义。

例如:

enum class Color : char { Red, Green, Blue }; // 使用 char 作为底层类型

总结

  • enum class:需要使用限定符(如 Color::Red),强类型且不会隐式转换为整数,适合现代 C++ 程序,安全性更高。
  • enum:不需要限定符,可以隐式转换为整数,适合较简单的枚举需求。

在现代 C++ 中,推荐优先使用 enum class 以确保代码的安全性和可读性。

标签:Color,enum,C++,枚举,类型,class,Red
From: https://www.cnblogs.com/chentiao/p/18538617

相关文章

  • C++中函数定义和函数声明的区别
    这个编译错误提示:Parameter'index'isconst-qualifiedinthefunctiondeclaration;const-qualificationofparametersonlyhasaneffectinfunctiondefinitions意思是,在函数声明(声明函数的原型)中,const 修饰符对参数 index 没有实际效果。const 仅在 函数定义 ......
  • C / C++ 整数类型转换规则与示例
    在C语言编程中,不同类型之间的转换是非常常见的事情,尤其是整数类型之间的转换,比如从较短类型到较长类型的转换、从有符号类型到无符号类型的转换等。这些转换看似简单,但如果不理解它们背后的机制,可能会导致一些隐蔽的bug。本文将深入探讨整数类型转换的规则和过程,并通过实例帮助大......
  • 编程语言哪家强?对比C,C++,Java等语言的区别
    文章目录开始主题前的一些问题语言举例汇编语言C语言C语言比起汇编多了什么东西?编译器的作用是?C++语言C++语言比C语言多了什么?(推荐《深度探索C++对象模型》)C++有什么编程范式?C++语言特性分别是怎样实现?C++编译器的准则与virtual机制?C++的virtual机制如何实现的?跨平台......
  • C++中clang tidy静态变量检查:Constructor does not initialize these fields
    这条警告通常表示在一个类的构造函数中,某些成员变量(如object和th_cfg)没有被显式初始化。编译器或静态分析工具(例如clang-tidy)可能会给出这样的警告,以帮助开发者避免潜在的未定义行为。可能原因缺少初始化:构造函数中没有对这些成员变量进行初始化,它们的值可能是未定义的。......
  • c++ 回溯算法
    概念回溯算法(Backtracking)是一种用于寻找所有可能解的算法。它通过递归构建解,并在发现当前解不符合条件时进行“回溯”撤销部分选择,直到找到有效的解或没有更多可能性时停止。回溯算法常用于求解组合、排列、子集、图的遍历等问题。基本思想选择:在某个阶段做出一个选择。......
  • C++中string字符串的基础操作,学习
    string字符串常用函数substring()string.length()&&string.size()string.find()string.replace()string.substr()string初始化和声明#include<bits/stdc++.h>usingnamespacestd; intmain(){stringstr1;//空字符串stringstr2="hello,w......
  • C++实现命令行文本计数统计程序
    附上一位博主写的关于git的使用(个人感觉非常完整,对新手很友好):Git及Tortoisegit下载安装及使用详细配置过程_tortoisegit下载远程代码-CSDN博客 Gitee地址:https://gitee.com/wnmdsqwnhkmc/second-assignment注:本文并不包含主函数,完整代码请移步Gitee路径:[项目>>ConsoleAppl......
  • C++中的RAII与内存管理
    C++中的RAII与内存管理引言资源获取即初始化(ResourceAcquisitionIsInitialization,简称RAII)是C++编程中一种重要的编程范式,它通过对象生命周期来管理资源,确保资源在不再需要时能够被正确释放。本文将从C++的内存布局入手,逐步深入到栈区、堆区的概念,new和delete的操作原理,最终......
  • 浅谈C++(2)
    hi,大家好,我们又见面了今天我继续来讲C++2:变量变量是什么?变量像一个盒子,里面的内容是可以更改的变量的定义:inta;如上代码段,是定义了一个为整数类型的变量a你可以使用cin>>a;来使它变成另一个值解释int是一种变量类型,只储存整数a是变量名;分号,分隔每一......
  • 找质数程序C++
    找质数程序C++今天看报纸时看到目前算出来最大的质数是2136279841-1于是自编了一串代码,分享给大家(ps:怕电脑冒烟的慎用)#include<iostream>usingnamespacestd;intmain(){ for(longlongi=9574463;;i+=2){ if(i%2!=0&&i%3!=0&&i%5!=0&&i%7!=0&&i%......