最近添加std::byte到C++ 17让我想知道为什么这种类型甚至被添加到标准中.即使在阅读了cppreference参考文献后,它的用例似乎也不清楚.
我能想出的唯一用例是它更明确地表达了意图,因为它std::byte应该只被视为一个比特集合而不是像char以前用于两个目的的字符类型.意思是:
这个:
std::vector<std::byte> memory;
Run Code Online (Sandbox Code Playgroud)
比这更明确:
std::vector<char> memory;
Run Code Online (Sandbox Code Playgroud)
这是唯一的用例以及它被添加到标准中的原因还是我错过了一个重点?
我能想到的唯一用例是它更明确地表达了意图
我认为这是其中一个原因.本文解释了背后的动机std::byte,并将其用法与char的用法进行了比较:
动机和范围
许多程序需要面向字节的内存访问.今天,为此目的,此类程序必须使用char,signed char或unsigned char类型.但是,这些类型执行"三重任务".它们不仅用于字节寻址,还用作算术类型和字符类型.这种多样的角色为程序员错误打开了大门 - 例如意外地对应该被视为字节值的内存执行算术 - 以及程序员和工具的混淆.具有不同的字节类型通过将面向字节的访问与访问存储器区分为字符或整数值来提高类型安全性.它提高了可读性.
拥有该类型还可以使代码的意图更清晰(以及用于理解和转换程序的工具).它通过消除程序员意图表达的模糊性来提高类型安全性,从而提高分析工具的准确性.
另一个原因是std :: byte在可以对此类型执行的操作方面受到限制:
与char和unsigned char一样,它可以用于访问其他对象占用的原始内存(对象表示),但与这些类型不同,它不是字符类型,也不是算术类型.字节只是一个位集合,只为它定义了按位逻辑运算符.
如上文所述,它确保了额外的类型安全性.
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |