给定不完整服务器的代码,例如:
enum class Command : uint32_t {
LOGIN,
MESSAGE,
JOIN_CHANNEL,
PART_CHANNEL,
INVALID
};
我可以期望转换Command::LOGIN
为整数总是会给出相同的值吗?
- 跨编译器?
- 跨编译器版本?
- 如果我添加另一个枚举?
- 如果我删除一个枚举?
转换Command::LOGIN
看起来像这样:
uint32_t number = static_cast<uint32_t>(Command::LOGIN);
关于我在这里做什么的一些额外信息。该枚举通过将其转换为整数发送到服务器/客户端来馈送到线路上。我并不特别关心数字是多少,只要它始终保持不变即可。如果它不会保持不变,那么显然我将不得不通过通常的方式提供我自己的号码。
现在我偷偷地怀疑它会根据用于编译代码的编译器而改变,但我想确定。
奖励问题:编译器/语言如何确定要使用的数字Command::LOGIN
?
在提交这个问题之前,我已经注意到从say 3137527848 到 0 和返回的一些变化,因此依靠它不改变显然是无效的。我仍然很好奇这个数字是如何确定的,以及这个数字如何或为什么会发生变化。