gpt4 book ai didi

c++ - sizeof(enum) 与 sizeof(std::underlying_type::type) 可以不同吗?

转载 作者:行者123 更新时间:2023-12-02 04:46:12 52 4
gpt4 key购买 nike

最近在代码审查中出现了以下示例:

enum class A : uint8_t
{
VAL1, VAL2
};

...
std::vector<A> vOfA; // Assume this is sized and full of some stuff.
std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A));

我们应该使用sizeof(std::underlying_type<A>::type)而不是sizeof(A)这些可能会有所不同吗?有人有保证这一点的标准引用吗?

最佳答案

在 C++03 中,这是有保证的(好吧,无论如何,对于无范围枚举)。

[dcl.enum] Enumeration declarations (emphasis mine)

6 The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. If no integral type can represent all the enumerator values, the enumeration is ill-formed. It is implementation-defined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0. The value of sizeof() applied to an enumeration type, an object of enumeration type, or an enumerator, is the value of sizeof() applied to the underlying type.

然后是n2347 ,该论文被采用用于强类型枚举(enum class)和无作用域枚举的其他增强功能,并且删除了粗体句子。有趣的是,该提案的早期版本 n2213 ,替换了被删除的句子。但它没有进入被采用的版本。

因此,在现代 C++ 中,大小没有义务必须相同。尽管从实际角度来看,实现不太可能改变 C++03 对于枚举大小规定的行为。

人们可能会认为这是标准中的缺陷。

关于c++ - sizeof(enum) 与 sizeof(std::underlying_type<Enum>::type) 可以不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59157507/

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