我们应该都用过枚举类型(enum),在C++中这个被称为自定义类型,在C#中,它是值类型的一种。

枚举的特殊之处在于它总是(也必须)可以转换为一个整数。默认情况下,它是一个int的整数。为什么这么说呢?就是每一个枚举的项都会有一个对应的整数。例如下面的例子

enum City{北京,上海,南京}

上述语句定义了一个叫做City的枚举,包含了三个城市,其中北京(或者表示为City.北京)对应的值是0,上海为1,以此类推

【备注】在C++中定义枚举,如果用了以上的汉字,就会通不过编译。我还没有找到解释,有知道的同学请给我反馈一下。这也许就是说C++对unicode支持不好的地方吧

当然,我们还可以为某些Item明确指定对应的整数值,例如

enum City{北京=5,上海=10,南京}

需要注意的是,此时南京并没有指定值,但它的值为11.就是说,如果自己没有定义,则等于前面的值加1

还有一个有意思的地方,假设我还有一个item,明确设置了11,那么会怎么样呢?例如

enum City{北京=5,上海=10,南京,杭州=11}

你会怎么考虑这个问题?会通不过编译吗?不,能通过,而且能使用。也就是说编译器或者运行环境都不会检查这种冲突。当然,实际上,这个问题很容易避免,因为枚举是我们自己定义的,你怎么会去这样做呢?给我一个理由先

如果我们来看这个类型的大小的话(sizeof),可以得到它是4个字节。

那么这里就有一个问题,我们只有三个值,凭什么要占4个字节呢?我就在想,当初设计这样一种默认行为是有问题的,哪一个枚举要有这么大呢?

如果我们想改变这种默认的行为,让枚举类型占用空间小一点,怎么办呢?

在C#中,可以像下面这样做

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(sizeof(City));
        Console.Read();
    }
}

enum City : byte//byte只占一个字节(取值范围0~255),char占两个字节(取值范围0~65536),short也占两个字节(在c#中,无符号的short和char是一样的,但short可以有符号——short,ushort)
{
    北京,
    上海,
    南京
}

这样是不是更加好一些呢

【注意】我还没有搞清楚在C++中定义的方式,同样,有知道的同学请给我一些反馈。

我最近就是在整理C++和C#的一些基础理论知识。因为C++对我来说不是很熟悉,所以很多时候都是用C#的思路带着去学习。

另外,在C#中使用枚举的方式也和C++不大一样

C#代码

class Program
{
     static void Main(string[] args)
     {
         Console.WriteLine(City.北京);
         Console.Read();
     }
}

enum City : byte//byte只占一个字节,char占两个字节,short也占两个字节(short有符号,无符号之分)
{
     北京,
     上海,
     南京
}

注意,我们并不需要实例化这个City枚举,而是可以使用静态的方式:City.北京

C++代码

#include <iostream>
using namespace std;
enum City{A=1,B=2,C=2};

int main()
{

cout<< sizeof(City)<<endl;
    City var =A;
    cout << A<<endl;

return 0;
}

也就是说,在C++中,它需要先实例化一个变量,然后才能使用

我还观察了一下,C#中其实是把枚举的每个项都编译成了一个静态变量

转载于:https://www.cnblogs.com/chenxizhang/archive/2009/06/08/1498365.html

定义枚举类型时指定其使用的大小 (C++,C#)相关推荐

  1. Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)

    01: Java–枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项) 02: Java–枚举类型(枚举类型实现接口 ...

  2. 【Java面试题】定义枚举类型Weekday,使用枚举类型配合switch语句,尝试如下功能:

    定义枚举类型Weekday,使用枚举类型配合switch语句,尝试如下功能: wd = Mon是输出"Do Monday work",wd = Tue时,输出"Do Mo ...

  3. 枚举的定义枚举类型定义

    枚举的定义枚举类型定义的一般形式为: enum 枚举名 { 枚举值表 }; 在枚举值表中应罗列出所有可用值.这些值也称为枚举元素. 例如: enum weekday { sun,mou,tue,wed ...

  4. Java中定义实例变量时指定初始化值顺序

    定义实例变量时指定的初始值.初始化块中为实例变量指定的初始值.构造器中为实例变量指定的初始值,三者的作用完全类似,都用于对实例变量指定初始值.经过编译器处理之后,它们对应的赋值语句都被合并到构造器中. ...

  5. Golang | 优雅地定义枚举类型

    不失优雅地定义枚举类型 枚举实际上是一种派生地数据类型,我们一般用来定义若干常量的集合.我们最常举的例子就是一周七天这种,它是最典型的使用枚举来定义的.枚举是一种特殊使用的常量,Go语言中定义枚举需要 ...

  6. 定义枚举类型,输出三角形的形状

    #include using namespace std; int main() {  enum triangle { scalene, isosceles, equilateral, notrian ...

  7. C语言枚举类型(enum)的各种用法

    文章目录 一. 基本概念 二.枚举类型的使用 三.枚举案例 一. 基本概念 枚举enum就是英文enumerate的缩写,也就是列举.排列说明的意思.枚举类型是C语言中的一种特殊类型,枚举类型可以让我 ...

  8. java枚举对象作用_浅析Java编程中枚举类型的定义与使用

    定义枚举类型时本质上就是在定义一个类,只不过很多细节由编译器帮您补齐了,所以某些程度上,enum关键字的 作用就像是class或interface. 当您使用"enum"定义枚举类 ...

  9. C++ 笔记-结构体-枚举-类型定义

    文章目录 为什么要使用"结构"(结构体) 还有一种特别的,结构体包含结构体,这种可以用于统计一个班人员信息等 结构数组 指向结构体的指针 使用结构体传递值 枚举 类型定义 为什么要 ...

  10. C++ 枚举类型介绍

    枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 定义格式:枚举类型的定义格式为: enum <类型名> {<枚举常量表> ...

最新文章

  1. php ci laravel,PHP 框架 ci 和 laravel 的问题
  2. 使用CSS选择器在页面中插入内容
  3. c++两个vector合并_这才是真正的 Git——分支合并
  4. PHP正则表达式怎么匹配多行
  5. net以execl做数据库_[原创]Net实现Excel导入导出到数据库(附源码)
  6. 用python绘制玫瑰花的代码_python也能玩出玫瑰花!程序员的表白代码
  7. 公有云关闭潮或显端倪,企业如何选择?
  8. struts2在action中获取request、session、application,并传递数据
  9. 机器学习-笔试题总结1
  10. 基于c语言的学生成绩管理系统论文,C语言学生成绩管理系统论文
  11. 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim仿真与调试应用与挑战
  12. 用友T3如何反结账,反记账
  13. 以太网与工业以太网的区别
  14. linux 压力测试pps,开发一款集群ddos防火墙压力测试
  15. 【Oracle】Oracle错误 ora-12514 检查以及解决方法
  16. Linux中的preempt_count
  17. pygame制作游戏全套的
  18. 【工具分享】佳能CR2格式的文件怎么转换成jpg?
  19. 16位片内地址的I2C SLAVE接口设计
  20. 爬虫系列:读取 CSV、PDF、Word 文档

热门文章

  1. ubuntu基础和来源
  2. UDSonCAN资料收集
  3. Python中time模块详解(转)
  4. 磁盘管理 之 parted命令添加swap,文件系统
  5. Oracle之外键(Foreign Key)使用方法具体解释(二)- 级联删除(DELETE CASCADE)
  6. 售货员的难题(codevs 2596)
  7. iOS 的TextView的常规用法
  8. 微软一些工具的官方下载地址
  9. Win32Asm学习笔记[不断更新]
  10. Linux操作系统的VI命令