6.5 Expressions (C)
An object shall have its stored value accessed only by an lvalue expression that has one ofthe following types:
- a character type.
但是C只允许char和unsigned char?
3.10 Lvalues and rvalues (C++)
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:
- a char or unsigned char type.
另一部分已经签字的仇恨(C标准引用):
3.9 Types (C++)
For any object (other than a base-class subobject) of trivially copyable type T,whether or not the object holds a valid value of type T,the underlying bytes making up the object can be copied into an array of char or unsigned char. If the content of the array of char or unsigned char is copied back into the object,the object shall subsequently hold its original value.
并从C标准:
6.2.6 Representations of types (C)
Values stored in non-bit-field objects of any other object type consist of n × CHAR_BIT bits,where n is the size of an object of that type,in bytes. The value may be copied into an object of type unsigned char [n] (e.g.,by memcpy); the resulting set of bytes is called the object representation of the value.
我可以看到很多人在stackoverflow说这是因为unsigned char是唯一的字符类型,保证没有填充位,但C99第6.2.6.2节整数类型说
signed char shall not have any padding bits
那么背后的真正原因是什么呢?
解决方法
原文地址:https://www.jb51.cc/c/112288.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。