2017-04-21 18 views
17

C++(和C)严格的别名规则包括char*unsigned char*可以别名任何其他指针。有一个std :: byte指针与char *具有相同的别名含义?

AFAIK没有类似的规则uint8_t*

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

的C++参考目前只是specifies

喜欢它可以被用于访问由其他对象(对象表示)占据的原始存储器中的字符类型(字符,无符号字符,符号字符),但不同于那些类型,它不是一个字符类型,也不是算术类型。

+4

http://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing同样的别名规则适用于'性病:: byte'为'char' – Justin

+2

@Justin:您可能希望更清楚一点,因为“适用规则”没有说明哪些规则适用。 'std :: byte'与'char'和'unsigned char'具有相同的规则。 – ShadowRanger

+0

@Justin:不是当你第一次发布(你有:“en.cppreference.com/w/cpp/language/...别名规则适用于'std :: byte'”)。你已经编辑过;我加载它预编辑。感谢您的修复。 – ShadowRanger

回答

14

从目前的标准草案([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类型。
相关问题