gpt4 book ai didi

c++ - C++中枚举数组的初始化

转载 作者:行者123 更新时间:2023-11-30 02:45:34 32 4
gpt4 key购买 nike

我正在学习 C++,现在正在做一些书中的练习。我被要求编写枚举的定义,它采用 3 个值(向前、向后、停止)和 15 个此类元素的数组。在这个定义中,我必须设置这个数组的前 5 个元素的值。我没有遇到任何问题,但它让我想到..如果我写:

enum move {FORWARD = 1, BACKWARD, STOP};
move array[15] {FORWARD, BACKWARD, STOP, STOP, STOP};

... 前 5 个元素的值为 1、2、3、3、3,但之后的所有元素的值为 0。这怎么可能,因为“移动”不能取 1、2 或 3 以外的值?如果我只指定前 5 个字段,为什么数组的其余部分仍然初始化?或者这可能只是意味着那些是空字段?

请用通俗易懂的方式解释,让像我这样的初学者也能看懂:),谢谢。

最佳答案

每个枚举都有一个基础类型,并支持一定范围的值。底层类型是一个整数类型,大到足以存储整个范围的值。该范围内的所有整数对于枚举类型的对象都是有效值(见下文),即使没有具有该值的枚举器也是如此。 0 在任何枚举的值范围内,因此用 0 初始化枚举类型的对象是可以的。

如果整数值在此枚举支持的值范围内,则它们可以转换为枚举类型。

如果您使用大括号 {..} 初始化聚合(如数组)并提供少于聚合中元素的初始值设定项,则生成的元素将被值初始化。对于基本类型(如 int)和枚举类型,这意味着它们将从整数 0 初始化,并转换为它们各自的类型。

move array[6] {FORWARD, BACKWARD, STOP, STOP, STOP};
// equivalent to:
move array[6] {FORWARD, BACKWARD, STOP, STOP, STOP, static_cast<move>(0)};

关于c++ - C++中枚举数组的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24355872/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com