最近std::byte
对C ++ 17的添加使我想知道为什么将这种类型甚至完全添加到标准中。即使阅读了cppreference参考,它的用例在我看来也不清楚。
我能想到的唯一用例是,它更清楚地表达了意图,因为它std::byte
仅应被视为位的集合,而不是像char
我们之前用于两种目的的字符类型。意思是:
这个:
std::vector<std::byte> memory;
比这更清楚:
std::vector<char> memory;
这是添加到标准中的唯一用例和原因,还是我在这里遗漏了重点?
我能提出的唯一用例是,它更清楚地表达了意图
我认为这是原因之一。本文解释了背后的动机std::byte
,并将其用法与char的用法进行了比较:
动机和范围
许多程序需要面向字节的内存访问。今天,此类程序必须为此使用char,signed char或unsigned char类型。但是,这些类型执行“三重职责”。它们不仅用于字节寻址,还用作算术类型和字符类型。角色的多样性为程序员错误打开了大门,例如意外地对应该被视为字节值的内存执行算术运算,以及程序员和工具的困惑。通过将面向字节的内存访问与作为字符或整数值访问内存区分开来,具有不同的字节类型可提高类型安全性。它提高了可读性。
具有类型还将使读者更清楚代码的意图(以及理解和转换程序的工具)。它消除了程序员意图表达中的歧义,从而提高了类型安全性,从而提高了分析工具的准确性。
另一个原因是std :: byte在可以对此类型执行的操作方面受到限制:
与char和unsigned char一样,它可以用于访问其他对象(对象表示)占用的原始内存,但是与那些类型不同,它不是字符类型,也不是算术类型。字节只是位的集合,并且仅为其定义了按位逻辑运算符。
如上文所述,这确保了附加的类型安全性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句