std :: byte指针是否与char*具有相同的别名含义?

max*_*zig 27 c++ strict-aliasing c++17

C++(和C)严格别名规则包括a char*unsigned char*可以别名任何其他指针.

AFAIK没有类似的规则uint8_t*.

因此我的问题是:std::byte指针的别名规则是什么?

C++参考目前只是指定:

与字符类型(char,unsigned char,signed char)一样,它可用于访问其他对象占用的原始内存(对象表示),但与这些类型不同,它不是字符类型,也不是算术类型.

Dei*_*Dei 20

从目前的标准草案([basic.types]/2):

对于普通可复制类型T的任何对象(基类子对象除外),无论对象是否保持类型T的有效值,组成对象的基础字节([intro.memory])都可以复制到的阵列炭,无符号的字符,或std ::字节 ([cstddef.syn]).43如果将该数组的内容复制回对象,则该对象应随后保持其原始值.

所以,是的,相同的别名规则适用于三种类型,就像cppreference总结一样.

提及([basic.lval] /8.8)可能也很有价值:

如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:

  • char,unsigned char或std :: byte类型.