正确的数据类型用于操作原始内存

时间:2017-03-21 20:43:11

标签: c++ c++11 c++14 c++17

我有一个便于编码/解码原始内存的类。我最终存储一个void指针指向内存和被引用的字节数。我担心混叠问题以及位移操作以使编码正确。从本质上讲,对于WHAT_TYPE,我应该使用charunsigned charint8_tuint8_tint_fast8_tuint_fast8_t,{{1 },或int_least8_t?规范中是否有明确的答案?

uint_least8_t

1 个答案:

答案 0 :(得分:10)

在C ++ 17中:std::byte。这种类型是专门为此创建的,以传达所有正确的语义含义。此外,它具有您需要在原始数据上使用的所有运算符(例如示例中的<<),但没有您不需要的运算符。

在C ++ 17之前:unsigned char。该标准将对象表示定义为unsigned char的序列,因此它只是一个很好的类型。此外,作为Mooing Duck rightly suggests,使用unsigned char*可以防止因错误地使用引用原始字节的char*而导致的许多错误,就好像它是一个字符串并将其传递给像{{1}这样的函数}}。

如果您确实无法使用strlen,则应使用unsigned charcharunsigned char都是允许别名的类型,因此要么优先于任何其他整数类型。