在 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
。
然后您可以将其包装在 class
或 struct
中,以限制可以分配给它的值。
【讨论】:
std::byte
不是用于算术的,而实际上只是“位的集合”,因此它不允许对它们进行任何算术运算,因此不适合存储数字。以上是关于在 C++ 中创建新的数据类型的主要内容,如果未能解决你的问题,请参考以下文章
powershell 这将在SharePoint 2013中创建新文档集。您必须启用内容类型。以下示例使用文档集名称“T