在 C++ 中创建新的数据类型

Posted

技术标签:

【中文标题】在 C++ 中创建新的数据类型【英文标题】:Create new data type in C++ 【发布时间】:2021-07-22 05:28:42 【问题描述】:

有没有办法。 我有一些变量的值永远不会> 100。因此,我想创建一个新的数据类型来仅存储 0 到 100 之间的值,这也会占用更少的内存。我可以使用unsigned short smth = 100; 但是 unsigned short 也占用 16 位,并且会有很多未使用的值。需要类似 java 中的 byte 数据类型。

16 位可能无关紧要,但想从我的应用程序中提取所有性能。

如果在 C++ 中不可能,有什么方法可以在 C 中实现并在 C++ 代码中实现?

【问题讨论】:

尝试使用int8_t,它需要8位。这是存储 100 等数字所需的最小值 en.cppreference.com/w/cpp/types/integer 类可以用于此。 如果你想从你的应用程序中“提取所有性能的汁液”,那么你不应该使用unsigned short,除非它是一个巨大的数组。 Performance of built-in types : char vs short vs int vs. float vs. double, int or char? which is faster?, When to use short over int? @김선달 位域的性能更差,因为您需要更多指令来提取和设置值。只有当您有一个不适合缓存的大型数组时才合理。简而言之,这个问题只是一个premature optimization 前提 【参考方案1】:

如果您想“从应用程序中提取所有性能优势”,则不应使用寄存器大小的类型以外的其他数据类型(在您的实现中可能是 int)。

如果您不关心可移植性,我建议使用uint_fast8_t。 是atleast 8 bits, but the implementation uses the faster type which can be bigger

其他答案 - 将功能封装到一个类中,也是有效的,应该结合我的建议。

【讨论】:

【参考方案2】:

对于存储,您可以使用(unsigned) char,或者更好的(u)int8_t。甚至是 C++17 及更高版本中的 std::byte

然后您可以将其包装在 classstruct 中,以限制可以分配给它的值。

【讨论】:

std::byte 不是用于算术的,而实际上只是“位的集合”,因此它不允许对它们进行任何算术运算,因此不适合存储数字。

以上是关于在 C++ 中创建新的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

在数据存储中创建新实体时“争用过多”

使用正则表达式在 Pandas 数据框中创建新列 [重复]

Core Data 自动迁移不会在我的新模型中创建新实体

powershell 这将在SharePoint 2013中创建新文档集。您必须启用内容类型。以下示例使用文档集名称“T

C++ 无法在注册表中创建新键

使用 C++ 在 Visual Studio 2019 中创建新的头文件?