C++(和C)严格的别名规则包括char*
和unsigned char*
可以别名任何其他指针。有一个std :: byte指针与char *具有相同的别名含义?
AFAIK没有类似的规则uint8_t*
。
因此,我的问题:std::byte
指针的别名规则是什么?
的C++参考目前只是specifies:
喜欢它可以被用于访问由其他对象(对象表示)占据的原始存储器中的字符类型(字符,无符号字符,符号字符),但不同于那些类型,它不是一个字符类型,也不是算术类型。
C++(和C)严格的别名规则包括char*
和unsigned char*
可以别名任何其他指针。有一个std :: byte指针与char *具有相同的别名含义?
AFAIK没有类似的规则uint8_t*
。
因此,我的问题:std::byte
指针的别名规则是什么?
的C++参考目前只是specifies:
喜欢它可以被用于访问由其他对象(对象表示)占据的原始存储器中的字符类型(字符,无符号字符,符号字符),但不同于那些类型,它不是一个字符类型,也不是算术类型。
从目前的标准草案([basic.types/2):
对于任何对象平凡 能够复制类型T的(比基类的其他子对象),是否对象持有有效值类型 T,构成对象的基础字节([intro.memory])可以被复制到char,unsigned char或std :: byte ([cstddef .syn])。 如果该数组的内容被复制回 该对象,该对象将随后保持其原始值。
所以是的,相同的别名规则适用于这三种类型,就像cppreference总结一样。
它还可能是有价值的提([basic.lval] /8.8):
如果一个程序试图通过 比的一个访问对象的存储值的其他一个glvalue以下类型的行为是 undefined:
- char,unsigned char或std :: byte类型。
http://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing同样的别名规则适用于'性病:: byte'为'char' – Justin
@Justin:您可能希望更清楚一点,因为“适用规则”没有说明哪些规则适用。 'std :: byte'与'char'和'unsigned char'具有相同的规则。 – ShadowRanger
@Justin:不是当你第一次发布(你有:“en.cppreference.com/w/cpp/language/...别名规则适用于'std :: byte'”)。你已经编辑过;我加载它预编辑。感谢您的修复。 – ShadowRanger