枚举(enum)所占空间
来源:互联网 发布:php ci框架 编辑:程序博客网 时间:2024/05/29 18:46
枚举(enum)
枚举的定义:
enum LOG_LEVEL{ DBG, INF, WAR, ERR, FAT, ALL, OFF};void WriteInfor(LOG_LEVEL level){ switch(level){case DBG:printf("%d\n",DBG);......}}
上述定义的枚举类型,默认为DBG=0,INF=1,依次类推。
(1)枚举类型是实数类型,可以跟int类型相互转换。 其所定义的常量子与枚举类型有同样的可见性,即DBG等可以被枚举类型外面的代码所看到。枚举类型没有名字限定作用。struct有名字限定作用。
(2)枚举类型所占的空间
C++标准文档中是这样说明的:“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”,也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型具有相同的尺寸呢?上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的值的整数就可以了。在VS2010中sizeof的值为4。
(3)枚举和int是否可以互换
枚举长度可能比int小,有些情况下最好不用互换。
enum EType { e1 = 0, e2, e3 };EType val;std::scanf( "%d", &val );
枚举类型变量的尺寸不一定和int类型相同,这样一来我们采用%d就 是说将枚举类型变量val当作4字节的int变量来看待并进行参数压栈,而在某些编 译器下sizeof( val )等于1字节,这样scanf函数就会将val变量地址中的后续的三 字节地址也压入栈中,并对其进行赋值,也许val变量后续的三个字节的地址没有 特殊含义可以被改写(比如是字节对齐的空地址空间),可能会认为他不会出现错 误,其实不然,在scanf函数调用结束后会进行栈清理,这样一来会导致scanf函数 清理了过多的地址空间,从而破坏了外围函数的栈指针的指向,从而必然会导致程 序运行时错误。
0 0
- 枚举(enum)所占空间
- enum枚举变量所占内存大小
- Android 控件隐藏(同时消除所占空间)
- 文件大小与所占空间的区别
- 分析所有表所占空间情况
- Oracle 查询某个表所占空间
- 不同类型的变量所占空间
- linux目录所占空间大小
- 分析对象所占空间大小
- 查询数据库表所占空间
- greenplum分区表查看所占空间大小
- C语言数据类型所占空间大小
- linux 查询目录所占空间大小
- greenplum分区表查看所占空间大小
- “文件大小”与“所占空间”的差别
- C++类的所占空间
- C++类所占空间总结
- 位域所占空间的大小
- Lighttpd工作流程
- 孤儿进程组http://blog.chinaunix.net/uid-27767798-id-3711413.html
- 一个四十岁的人给你提个醒,很中肯!
- android stdio的快捷键
- 第二课 代码风格规范
- 枚举(enum)所占空间
- Matlab 集群计算平台搭建
- 疫苗:HashMap的死循环
- 【kmp循环节】hdu 3746 Cyclic Nacklace
- C++primer第五版笔记-第六章函数
- android stdio简单介绍和使用
- 在纯净的linux中配置安装caffe直到可以训练和测试自己的数据集(1/2)
- ZOJ-3793-First Digit
- UVA - 1588 Kickdown