首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在C++类中,枚举的变量名必须在枚举值之后?

在C++类中,枚举的变量名必须在枚举值之后的原因是为了确保枚举类型的变量在定义时具有确定的值。

枚举类型是一种特殊的数据类型,它允许我们定义一组具有相同类型的常量。在C++中,枚举类型的定义通常包含枚举名称和一组枚举值。枚举值是枚举类型的具体常量,它们可以是整数、字符或其他整数类型。

当我们在类中定义枚举类型时,我们希望这个枚举类型的变量在创建时就具有确定的值。如果我们将变量名放在枚举值之前,那么在定义变量时,编译器无法确定变量的值,因为它还没有遇到枚举值的定义。这将导致编译错误。

因此,为了确保枚举类型的变量在定义时具有确定的值,C++规定了枚举的变量名必须在枚举值之后。

举例来说,假设我们有一个表示颜色的枚举类型:

代码语言:txt
复制
enum Color {
    RED,
    GREEN,
    BLUE
};

在这个例子中,枚举类型Color的变量可以在定义时具有确定的值,例如:

代码语言:txt
复制
Color myColor = RED;

如果我们将变量名放在枚举值之前,例如:

代码语言:txt
复制
enum Color {
    myColor,
    RED,
    GREEN,
    BLUE
};

那么在定义变量时,编译器无法确定myColor的值,因为它还没有遇到RED的定义,这将导致编译错误。

总结起来,C++类中枚举的变量名必须在枚举值之后,是为了确保枚举类型的变量在定义时具有确定的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#基础知识大总结(在C语言的基础上)

1, //默认第一个值是0 下面依次累加     自定义枚举项名字2,     自定义枚举项名字3, } 如果自己给其中一个枚举项赋了值,那么后面的项都会在此基础上递增,除非人为的再次改变 b.声明 一般在...namespace语句块当中声明  可以在class语句块中 可以在struct语句块中 不能在函数中声明!!!...公式:自定义的枚举类型 变量名 = 默认值; (自定义的枚举类型.枚举项) enum E_PlayerType {     Main, //默认第一个值是0 下面依次累加     Other, } E_PlayerType...a.交错数组(几乎不用 有兴趣可了解) 二、值与引用 引用类型有:string、数组、类 值类型:除引用类型之外如char、int、short、bool和结构体等一系列 1.特殊引用类型string 每次赋值...1.访问修饰符 修饰结构体中的变量和方法 能否被外部使用 public是公共的  private是私有的(默认都是私有的) 2.结构体构造函数 没有返回值 函数名与结构体名相同 必须有参数 声明了构造函数就必须在其中对所有变量数据初始化

23520

C编程规范整理

这一点并不是必须遵循的规则,输入/输出两用参数(通常是类/结构体变量)混在其中,会使得规则难以遵循。 包含文件的名称及次序:C库、C++库、其他库的.h、项目内的.h。 编写短小函数。...变量名一律小写,单词间以下划线相连,类的成员变量以下划线结尾,如my_exciting_local_variab1e、my_exciting_meber_variab1e_。 全局变量。...其他短小的内联函数名也可以使用小写字母,例如,在循环中调用这样的函数甚至都不需要缓存其值,小写命名就可以接受。 枚举命名。...枚举值应全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE。枚举名称属于类型,因此大小写混合:Ur1Tab1eErrors。 宏命名。...避免在注释中使用缩写,除非是业界通用或子系统内标准化的缩写。 注释应考虑程序易读及外观排版的因紊,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。

83020
  • 夯实Java基础系列12:深入理解Java中的反射机制

    像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器的特殊处理叫...那么像枚举也是在JDK1.5中才引入的,又是怎么实现的呢? Java在1.5中添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有...之后通过实例就可以随意的获取实例中的任意参数值了。...如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如 key 参数值,就能获取到其对应的枚举值,然后想要什么值,就 get 什么值就好了。

    1.6K00

    Gopro Ardunio控制库.2

    以表示该变量是某个类的属性。...看枚举值 ---- 枚举变量未分配初始值。默认情况下,第一个枚举成员的默认值为“0”,后续枚举成员dao值为前一个枚举成员的值(按文本顺序)加一。...但是,其值必须在基础类型可以表示的值范围内;枚举类型,通过预定义列出所有值的标识符来定义有序集,其顺序与枚举类型描述中的标识符顺序一致。枚举类型的形式:(标识符1,...,标识符n)。...枚举元素只能是标识符,而不是数字常量或字符常量。枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。...枚举值有点迷, hero4->4就是这样了..... ? 看注意事项 ? 不知道你们有没有看懂我为什么还在这里研究,就是我觉得枚举值不对, 看下面的这些东西应该是枚举值得基础上再加1????为什么

    53010

    protobuf 序列化和反序列化

    将xxx.proto文件生成一个c++的类 会生成一个头文件/ 源文件 操作命令-> 在window终端中: protoc xxx.proto --cpp_out=./ 使用这两个文件...成员变量 数据类型 变量名 = 变量的编号; // 编号从1开始, 不能重复 } // .proto文件 生成 c++ 类的命令 protoc proto文件名 --cpp_out=生成目录 具体转换类型规则如下所示...以下是一个示例,展示了如何使用protobuf中的枚举类型: // 定义枚举 enum PhoneType { MOBILE = 0;// protbuf中第一个枚举值必须为0 HOME =...这样,我们就可以轻松地区分不同类型的电话号码,并按照类型进行处理。 在protobuf中,枚举类型的值对应一个整数,可以使用=操作符为其指定具体的值。...C++ API来读写消息 读: 变量名() 写: set_变量名(arg1, arg2, ...)

    58810

    夯实Java基础系列14:深入理解Java枚举类

    像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器的特殊处理叫...那么像枚举也是在JDK1.5中才引入的,又是怎么实现的呢? Java在1.5中添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有...之后通过实例就可以随意的获取实例中的任意参数值了。...如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如 key 参数值,就能获取到其对应的枚举值,然后想要什么值,就 get 什么值就好了。

    51320

    夯实Java基础系列14:深入理解Java枚举类

    像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器的特殊处理叫...那么像枚举也是在JDK1.5中才引入的,又是怎么实现的呢? Java在1.5中添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有...之后通过实例就可以随意的获取实例中的任意参数值了。...如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如 key 参数值,就能获取到其对应的枚举值,然后想要什么值,就 get 什么值就好了。

    38000

    Java基础:Java基本概念

    1、声明变量 在 Java 中,每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量名之前。...3、常量 在 Java 中,利用关键字 final 指示常量,关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。...在 Java 中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字 static final 设置一个类常量。...Size.MEDIUM; Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值,null 表示这个变量没有设置任何值。...注意事项:①多个方法必须在同一个类中;②多个方法有同样的方法名;③多个方法参数不相同,即数量不相同或者类型不相同;④重载仅仅针对同一个类中名称与参数进行识别,与返回值无关。

    35260

    预处理--》编译--》运行的区别

    枚举类型的成员是常量,它们的值由编译器自动分配,例如定义了上面的枚举类型之后,RECTANGULAR就表示常量0,POLAR 表示常量1。...枚举常量也是一种整型,其值在编译时确定,因此也可以出现在常量表达式中,可以用于初始化全局变量或者作为case 分支的判断条件。...有一点需要注意,虽然结构体的成员名和变量名不在同一命名空间中,但枚举的成员名却和变量名在同一命名空间中,所以会出现命名冲突。那什么是命名空间呢?...,可以看到打印完之后里面的rectanger变量就会被释放,但polar变量得等整个函数调用完毕才会释放,因为这里使用的是枚举类型中的成员。...的值必须在程序运行时调用 acos函数才能得到,所以不能用来初始化全局变量。

    89170

    Java程序设计(Java9版):第4章 简单复合类型

    第4章 简单复合类型 4.1 数组 在C语言中,数据类型除了基本数据类型之外,还存在着大量复合数据类型。数组就是一类最简单且非常重要的复合数据类型,数组是具有相同类型变量的顺序存储的集合。...第一步先通过“数据类型 变量名”声明变量,只在栈内存中为变量名分配一个很小的空间,但是并没有开辟具体的数据空间;比如某一复合数据类型声明了变量a,如图2.44所示。...第二步,通过new关键字在堆内存中开辟一个复合“数据类型”大小的存储空间,用于存储具体是数据实体;然后将该存储空间的地址赋值到变量名的栈存储空间内。...数组是引用类型,所以数组名存储在栈内存中,而数组元素存储在堆内存中。 4.1.2 数组操作 (1)数组初始化 数组初始化就是为数组的元素分配内存空间,并为每个数组元素指定初始值。...; 可以将一个枚举类型定义在Java源文件中,编译后得到字节码文件。

    1.1K100

    C++ Primer Plus 第四章 复合类型 学习笔记

    数组声明的三个特点: 存储在每个元素中的值的类型 数组名 数组中的元素数 C++中可以通过修改简单变量的声明,添加中括号(其中包含元素数目)来完成数组声明。...基于String类库的方法 存储在连续字节中的一系列字符意味着可以将字符串存储在char数组中。其中每个字符都位于自己的数组元素中。...3. string类 string类位于名称空间std中,所以需要提供using指令或者是直接使用std::string进行引用。 要使用string类,必须在程序中包含头文件string中。...enum {zero,null = 0,numero_one,one = 1}; 6.2 枚举的取值范围 每个枚举都有取值范围的上限,通过强制类型转换,可以将取值范围中的任何整数值赋给枚举常量,即使这个值不是枚举值...*/ 在C++中,int*是一种复合类型,是指向int的指针。

    1.8K00

    《C++ primer》--第1,2章小结

    5、C++中,把负值赋给unsigned对象是合法的,其结果是该负数对该类型的取值个数求模后的值,如果把-1赋给8位的unsigned char 那么结果就是255。...C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储与该内存中的值的取值范围以及可运用在该变量上的操作集。     2.C++关键字 ?...引用是一种复合类型,在变量名前添加"&"符号来定义。复合类型指其他类型定义的类型。...定义多个引用:可以在一个类型定义行中定义多个引用。必须在每个引用标识符前添加"&"符号。 const引用:指向const对象的引用。可以读取但不能修改。...:头文件可以定义类、值在编译时就已知的const对象和inline函数) 一些const对象定义在头文件中 16、预处理器的简单介绍  1.头文件经常需要其他头文件    2.避免多重包含:预处理器变量的名字在程序中必须是唯一的

    889100

    四、从C语言到C++(四)

    这意味着你不能依赖于 expression_if_true 或 expression_if_false 中的任何副作用(例如,修改变量的值)在评估条件之前或之后发生。...但是,请注意,尽管语法相同,但C和C++在其他方面(如内存管理、函数重载、类支持等)存在显著差异。 引用 在C语言中,我们没有直接对应于C++中的"引用"(reference)的概念。...在C中,我们使用*符号来声明指针,并在函数调用中传递变量的地址(使用&操作符获取)。 在C++中,引用在声明时必须被初始化,并且之后不能被重新绑定到另一个对象。...: 在 C++ 中,无论是传统的枚举还是强类型枚举,枚举值都在枚举类型的作用域内。...这意味着你可以避免枚举值与其他标识符(如变量名、函数名等)之间的命名冲突。

    7810

    Java 中枚举类的使用

    在日常写项目时,很多数据字典常量都需要定义和使用,同时在 Java 面试中,枚举也是一个绕不开的话题,这篇文章就来详细介绍一下枚举的定义以及使用。 01  【什么是枚举类?】...枚举类型在 C# 或 C++ 、 java 、 VB 等一些编程语言中是一种基本数据类型而不是构造数据类型。 而在C语言中则是一种构造数据类型。...枚举类的定义就是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内,使用枚举可以很方便地定义数据常量、以及我们的使用。 02  【为什么需要枚举类?】...我们调试的时候,最初将“男”输出,结果为1。因此,我们必须在前面寻找0的含义。 尤其是当我们查看其他人的代码时会看不懂。而定义枚举类在类里面进行详细说明的话就能清楚得知含义。 (2)代码更优雅。...在大一点的项目中,可以使用数百个静态常量。如果它们都写在一个文件类里面的话,很容易造成命名混乱,程序也很难读取。 (3)可以帮助我们定义所需的类型。 枚举易于记忆和使用,相当于一个接口。

    1.6K20

    Python编程思想(31):枚举类型深度详解

    在很多场景下,一个变量的值是固定且有限的,例如,季节只有4个值(春、夏、秋、冬),性别只有2个值(男和女)。这种值有限且固定的数据类型在Python中称为枚举类型。 1....枚举类型基础 在Python中有两种方式来定义枚举类型: 直接使用Enum列出多个枚举值来创建枚举类 通过继承Enum基类来派生枚举类 如下面的代码演示了直接使用Enum列出多个枚举值来创建枚举类类型。...在定义了上面的 Season枚举类之后,程序可直接通过枚举值进行访问,这些枚举值都是该枚举的成员,每个成员都有name和value两个属性,其中name属性值为该枚举值的变量名,value代表该枚举值的序号...虽然此时 Orientation枚举类型的 value是str类型,但该枚举类同样可通过 value来访问特定枚举值,如上面程序中的 Orientation(’北'),这是完全允许的。...为枚举定义构造方法之后,在定义枚举实例时必须为构造方法参数设置值,代码如下: 示例代码:enum_constructor,py import enum class Sex(enum.Enum):

    3.3K10

    java枚举类解读

    为什么需要枚举类 类的对象只有有限个,确定的。举例如下:  星期:Monday(星期一)、.........  使用说明 使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类 枚举类的构造器只能使用 private 权限修饰符 枚举类的所有实例必须在枚举类中显式列出...列出的实例系统会自动添加 public static final 修饰 必须在枚举类的第一行声明枚举类对象 JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式...,那么将会抛出异常No enum constant 实现接口的枚举类 和普通 Java 类一样,枚举类可以实现一个或多个接口 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可...若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法

    19640

    零基础学Java(2)数据类型与变量

    整型值和布尔值之间不能进行相互转换。 注释 在C++中,数值甚至指针可以代替boolean值。值0相当于布尔值false,非0值相当于布尔值true。在Java中则不是这样。...变量名大小写敏感 +这样的符号不能出现在变量名中,空格也不行 不能使用Java保留字作为变量名 变量初始化 声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量的值。...我们可以看到当我们要修改常量时,就会报错,原因如下: 在Java中,经常希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量。...因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。...方法中依然可以使用类变量,因为都是FirstSample这个类中的方法 System.out.println(CM_PER_INCH); } } 枚举类型 有时候,变量的取值只在一个有限的集合内

    33520

    C# 学习笔记(2)—— 语言基础

    举个实际场景就是你的关键字和实体属性冲突的情况下,我们会在实体字段前加上 @ 前缀 数据类型 通用类型系统(CTS)将类型分为两大类:值类型和引用类型 值类型包含:数值类型、布尔类型、枚举类型、结构体类型...这就是 string 的不可变性,所以,如果你一个字符串频繁的进行修改,会增加内存开销 枚举类型 枚举类型属于值类型,它用于声明了一组命名了的常数 enum Gender { Female,...Male } 很少有人知道我们还可以给枚举添加继承 enum Gender : byte { Female, Male, } 结构体 C# 中的结构体是一种值类型,通常适用于表示诸如 Point...因为有了变量,我们不需要再去记忆复杂的内存地址,而是转为通过变量名来完成内存数据的存取操作。...与变量不同,常量不能在赋值之后发生变化,而其对应内存中的值不能被改变 变量的使用 语法很简单:数据类型 变量名 如果要同时声明多个同类型变量,可以用这种语法: int a, b, c; 如果在声明之后,

    19010
    领券