我最近开始使用OpenCL库,我注意到他们正在使用自己的整数类型,比如cl_int和cl_uint,而不是int和unsigned int。
为什么?为什么他们不使用语言中默认的类型?这是一个好习惯还是有实际原因(即更易读的代码)?
答案 0 :(得分:8)
过去这样做的原因是便携性。 C和C ++没有对int
,long
和short
的大小做出具体保证,而库设计者通常需要它。
一个常见的解决方案是为数据类型定义自己的别名,并根据特定平台更改定义,确保使用适当大小的类型。
这个问题起源于C,并通过引入stdint.h
头文件(在C ++中重命名为cstdint
)得到解决。包含此标头允许您声明类型int32_t
,int16_t
等。但是,在引入stdint.h
之前开发的库以及在缺少此标头的平台上编译所需的库正在使用旧的解决方法。
答案 1 :(得分:3)
通常情况下,可以在整个代码中设置和传播不同的配置。
例如,我知道Bullet 3定义btScalar
,其中(基本上)基本上是:
#if defined(BT_USE_DOUBLE_PRECISION)
typedef double btScalar;
#else
typedef float btScalar;
#endif
因此,在整个代码中,您可以使用btScalar
代替float
或double
,并且可以通过定义或取消定义该宏来切换所有实例。
还有其他类似的处理width of integer types,different character sets和其他平台相关方案。
答案 2 :(得分:3)
通过定义自己的类型,他们可以安全地依赖于知道这些类型将始终具有相同的大小。
类型因平台和编译器而异。
尽管STL确实提供了preg_match_all
,但是一些开发人员更喜欢他们自己的定义,因为他们不希望使用STL。
大多数情况下,您可以假设int的大小为32位,但它可以更改,而且这是一些开发人员更愿意定义自己的可靠类型的地方。