gpt4 book ai didi

C++ 双重枚举值赋值

转载 作者:行者123 更新时间:2023-11-28 01:33:23 25 4
gpt4 key购买 nike

在一个开源代码中,我发现了一个枚举初始化,看起来像这样:

enum example {
FIRST,
FIRST_AGAIN = FIRST,
SECOND,
ETC
};

我很惊讶枚举的值是如何被初始化的,因为 FIRST_AGAIN 会得到值 0 因为 FIRST0,也是。但我认为当 FIRST_AGAIN 值为 0 时,它可能会影响 FIRST 值为 -1

因此,我使用调试器查看了为关键字分配的值。 FIRSTFIRST_AGAIN 被分配了 0

所以,我的问题是,是否真的允许(GCC 编译它,但 C++ 标准怎么说?)在枚举中分配两个具有相同值的关键字?编译器如何翻译赋值?因为要知道 FIRST 的值,编译器应该首先遍历整个枚举并查看是否分配了任何关键字,从那里返回,他可以分配所有其他值,但他没有知道赋值 FIRST_AGAIN = FIRST 的含义。

也许这个问题很愚蠢,做这样的事情很常见。为两个关键字分配相同的值有什么好处?

最佳答案

So, my question is, is it really allowed (GCC compiles it, but what does the C++ standard say?) to assign two key words in an enumaration with the same value?

没关系。 C++ 标准在规范性文本中没有说明任何内容,因此它是隐式允许的,但包含一个示例:

enum { a, b, c=0 };

ac 定义为零。

And how does the compiler translate the assignment? Because to know the value of FIRST, the compiler should gone through the whole enum first

不,编译器不需要那样做。没有显式值的枚举器定义不依赖于以后的枚举器定义。它的值是前一个枚举器的值加一,如果没有前一个枚举器,则为零。

Maybe the question is stupid and it's common use to do something like that. What would be the benefits of assigning two key words with the same value?

一种可能:

enum E {
A = 20,
B = 30,
C = 40,
MIN = A,
MAX = C
}

在这里,可以预期 MINMAX 的值可能会随着枚举器的添加或删除而改变,但是 A 的值>、BC 应保持不变。通过在需要 C 的地方使用 C,在需要范围的地方使用 MINMAX,代码可能是 future 的- 为定义此枚举的任何库的更高版本提供证明。

关于C++ 双重枚举值赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50561778/

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