字节的类型应为 std::byte 或 unsigned char
6.7.3 ID_plainBinaryChar
字节等二进制概念不应受对齐方式或符号位的干扰,字节的类型应为 std::byte 或 unsigned char。
std::byte 是 C++17 的标准字节类型,对字节相关的运算和操作提供了更安全的限定。在 C 代码或不便于遵循新标准的 C++ 代码中,应将字节类型声明为 unsigned char。
示例:
typedef char byte; // Non-compliant
byte buf[100];
FILE* fp = fopen("foo", "rb");
fread(buf, 1, 100, fp);
if (buf[0] == 0xff) { // May be always false
....
}
if (buf[1] << 1) { // May cause undefined behavior
....
}
char 类型的符号由实现定义,有符号的 char 变量在数值计算、位运算等方面很容易产生意料之外的结果。
应改为:
typedef unsigned char byte; // Compliant
这样做也可有效区分二进制数据与字符串,提高可读性。
相关
依据
ISO/IEC 9899:1999 6.2.5(3 15)-implementation
ISO/IEC 9899:2011 6.2.5(3 15)-implementation
ISO/IEC 14882:2003 3.9.1(1)-implementation
ISO/IEC 14882:2011 3.9.1(1)-implementation
ISO/IEC 14882:2017 21.2.1
ISO/IEC 14882:2017 21.2.5