std :: byte的用例

戴着帽子的公鸡

最近std::byte对C ++ 17的添加使我想知道为什么将这种类型甚至完全添加到标准中。即使阅读了cppreference参考,它的用例在我看来也不清楚。

我能想到的唯一用例是,它更清楚地表达了意图,因为它std::byte仅应被视为位的集合,而不是像char我们之前用于两种目的的字符类型意思是:

这个:

std::vector<std::byte> memory;

比这更清楚:

std::vector<char> memory;

这是添加到标准中的唯一用例和原因,还是我在这里遗漏了重点?

埃德加·洛克詹(EdgarRokjān)

我能提出的唯一用例是,它更清楚地表达了意图

我认为这是原因之一。本文解释了背后的动机std::byte,并将其用法与char的用法进行了比较

动机和范围

许多程序需要面向字节的内存访问。今天,此类程序必须为此使用char,signed char或unsigned char类型。但是,这些类型执行“三重职责”。它们不仅用于字节寻址,还用作算术类型和字符类型。角色的多样性为程序员错误打开了大门,例如意外地对应该被视为字节值的内存执行算术运算,以及程序员和工具的困惑。通过将面向字节的内存访问与作为字符或整数值访问内存区分开来,具有不同的字节类型可提高类型安全性。它提高了可读性。

具有类型还将使读者更清楚代码的意图(以及理解和转换程序的工具)。它消除了程序员意图表达中的歧义,从而提高了类型安全性,从而提高了分析工具的准确性。

另一个原因是std :: byte在可以对此类型执行的操作方面受到限制:

与char和unsigned char一样,它可以用于访问其他对象(对象表示)占用的原始内存,但是与那些类型不同,它不是字符类型,也不是算术类型字节只是位的集合,并且仅为其定义了按位逻辑运算符

如上文所述,这确保了附加的类型安全性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章