gpt4 book ai didi

c++ - std::byte 定义明确吗?

转载 作者:IT老高 更新时间:2023-10-28 13:01:30 24 4
gpt4 key购买 nike

C++17 引入了 std::byte 类型。一种可以(据说)用于访问原始内存的库类型,但与字符类型分开,仅代表一个位 block 。

到目前为止一切顺利。但是这个定义让我有点担心。如 [cstddef.syn] 中所述:

enum class byte : unsigned char {};

我在 SO 上看到了两个答案,这似乎暗示了关于上述稳健性的不同事情。 This answer争论(没有引用)具有基础类型的枚举具有与所述类型相同的大小和对齐要求。直觉上这似乎是正确的,因为指定底层类型允许不透明的枚举声明。

但是,this answer认为该标准仅保证具有相同底层类型的两个枚举是布局兼容的,仅此而已。

阅读时[dcl.enum]我不禁注意到,确实,底层类型仅用于指定枚举数的范围。没有提及尺寸或对齐要求。

我错过了什么?

最佳答案

本质上,围绕 c++17 草案标准的特殊措辞赋予 std::bytechar 相同的别名属性无符号字符

举个例子,在 n4659 的 $6.10 中声明

8 If a program attempts to access the stored value of an object through a glvalue of other than one of the following types the behavior is undefined.
[...]
(8.8) — a char, unsigned char, or std::byte type.

我没有进行详尽的搜索,但基本上任何 char 在标准中得到特殊处理的地方,std::byte 也是如此。就访问内存而言,将其定义为枚举或它的底层类型是什么似乎无关紧要。

编辑
也许我错误地理解了您的问题:如果您要问,如果标准保证 sizeof(std::byte) == alignof(std::byte) == 1 那么我相信这不是案例,因为似乎没有关于这些属性如何依赖于作用域枚举的基础类型的措辞,并且在这方面我找不到 std::byte 的特殊措辞。作为@T.C.在评论中提到,这可能是语言的缺陷。

关于c++ - std::byte 定义明确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45136738/

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