枚举类型的初始值问题

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

首先记住两点:

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


原文:https://blog.csdn.net/coobeara/article/details/1644548

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值