首页 > 编程语言 >C++中使用强类型的Enum Class

C++中使用强类型的Enum Class

时间:2023-05-19 18:45:40浏览次数:48  
标签:Enum enum C++ retangle 报错 circle Class

在C++中,有Enum class这种说法,在Effective modern C++ 这本书中,也提到Prefer scoped enums to unscoped enum, 就是说要用有范围的enum class代替没有范围的enum. 为什么会有这个问题呢?

我们来看一个C++里面使用传统enum的例子:

enum Shape {circle,retangle};
auto circle = 10; // 这里会报错, 报error

这个出现错误,你可能会觉得挺奇怪的,因为在C#里面,类似的代码是没有问题的。但是在C++中,就是不行。 原因如下 =>

在C++中,你定义一个enum类型,比如上面的  enum Shape {circle,retangle}, 它其实等价于

#define circle 0
#define retangle 1

所以,你后面用auto再去定义一个circle, 这时系统就会报错。  =》  这也就是说,在C++中,不管枚举名是否一样,里面的成员只要有一致的时,就会出现问题, 比如

enum A {a,b};
enum B {c,a}; //里面的成员a,在上面的枚举A中已经出现了一次,这里再次出现,会报错

 

标签:Enum,enum,C++,retangle,报错,circle,Class
From: https://www.cnblogs.com/wphl-27/p/17416025.html

相关文章

  • 开心档之C++ Web 编程
    C++Web编程什么是CGI?公共网关接口(CGI),是一套标准,定义了信息是如何在Web服务器和客户端脚本之间进行交换的。CGI规范目前是由NCSA维护的,NCSA定义CGI如下:公共网关接口(CGI),是一种用于外部网关程序与信息服务器(如HTTP服务器)对接的接口标准。目前的版本是CGI/1.1,CGI/......
  • 开心档之C++ 变量类型
    C++变量类型变量其实只不过是程序可操作的存储区的名称。C++中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不......
  • c++函数参数和返回值
    c++函数参数和返回值函数存储位置函数参数入栈顺序初始化列表函数的返回值用参数引用来返回返回一个参数指针返回一个对象总结函数的几种变体inline函数函数对象lambda函数c++函数参数和返回值c++一直以来是一个关注效率的代码,这样关于函数的参数传递......
  • Qt C++5.9开发指南
     第1章认识Qt1.1Qt简介1、Qt是一套应用程序开发类库,但与MFC不同,Qt是跨平台开发类库。2、跨平台意味着只需要编写一次程序,在不同平台上无需改动或只是需要少许改动后再编译,就可以形成不同平台上运行的版本。1.2Qt的获取与安装1.2.1Qt的许可类型1.2.2Qt的版本1、如果不......
  • c++ 输入文件流ifstream用法详解[转]
    目录文章目录输入流的继承关系:成员函数Publicmemberfunctions1,(constructor)2,ifstream::open3,ifstream::is_open4,ifstream::close5,ifstream::rdbuf6,ifstream::operator=Publicmemberfunctionsinheritedfromistream7,std::istream::operator>>8,istream::gcount9,istr......
  • C++ Primer 学习笔记—— 第三章
    第三章字符串、向量和数组前言标准库是C++必不可少的一部分,作为C++的延伸,标准库的优雅令人陶醉。如标题所言,在这一章我们将要学习数组、字符串和向量。若学习过其他编程语言,相信对数组并不陌生。其作为固定存储序列,能够为我们提供很多数据结构的解决思路,但是其在灵活性方面的......
  • c++ 子类与父类的构造函数继承关系
    规范上,子类构造函数肯定是会调父类的构造函数。 如果代码中没写,就会隐含调用父类的默认构造函数(即那个无参构造函数)。如果父类没有,编译报错。 1,展示了当子类要调用父类中带参数的构造函数时:#include<iostream>#include<cstdio>classA{public:A(){printf("......
  • C++实现查询本机信息并且上报
    业务需求共享文件夹、盘会导致系统安全性下降,故IT部门需要搜集公司中每台电脑的共享情况,并且进行上报关键字WMI查询、Get请求、C++网络库mongoose前置需要1、简单C++语法知识2、mongoose库的导入3、C++项目的启动代码复制并不能直接使用,需导入mongoose库完整github项目代码......
  • 详解c++STL—容器list
    1、list基本概念1.1、概念描述链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成功能:将数据进行链式存储1.2、结点的组成一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一......
  • c++ stoll
    stoll,字符串转换为longlong(114条消息)C/C++编程笔记:stol和stoll函数,函数调用中的字符串转换_c++stoll_一起学编程的博客-CSDN博客......