我是靠谱客的博主 斯文羊,最近开发中收集的这篇文章主要介绍枚举类型的初始值问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

枚举类型是内置类型吗?型的的初始化规则是什么? 

首先记住两点:

1、内置类型变量(int,bool,指针等)的初始化规则
在函数体外(全局)定义的内置类型变量会自动初始化0,函数体内定义的内置类型变量不会初始化。类里面定义的内置类型变量不会自动初始化。
2、类类型变量的初始化是调用构造函数(不论是全局还是局部)。类类型变量的类类型成员自然也是调用其构造函数初始化。类类型变量的内置类型成员如第一条所说,不会自动初始化,需要你在初始化列表或构造函数里面初始化。

枚举类型就是是不是内置类型,我是觉得可以算,他不就是一无符号(短、长)整形嘛。

另外注意:枚举类型占用的字节数,是根据枚举值的范围决定的(当然也取决于编译器),如果用char型就能覆盖枚举的所有值,就不会用unsigned int型。但不会超过int型字节数。

枚举值的缺省值是0,不是枚举的第一个值。当然前提是全局变量的情况下才能保证。其他情况,其值是不定的,而且不限定于所列出的枚举值。

举例如下:

enum Status
{
    running = 3,
    stop,
    error
};
class Car
{
public:
    Status s;
};
Status gs;
Car gc;
int main()
{
    Status s1;
    Car c1;
    std::cout << "gs  :" << gs << std::endl;
    std::cout << "gc.s:" << gc.s << std::endl;
    std::cout << "s1  :" << s1 << std::endl;
    std::cout << "c1.s:" << c1.s << std::endl;
    std::cout << "size:" << sizeof(Status) << std::endl;
    return 0;
}

打印输出:

C:/WINDOWS/system32/cmd.exe /c ./a.exe
gs  :0
gc.s:0
s1  :2
c1.s:9
size:4
Hit any key to close this window...

编译环境:VC、DEVCPP、VIM

最后

以上就是斯文羊为你收集整理的枚举类型的初始值问题的全部内容,希望文章能够帮你解决枚举类型的初始值问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部