我已经看到使用这些类型的不同代码片段,但我还没有看到它们是否在某些<标准头文件>中定义。或者只是在“本地头文件”中定义,或者甚至在文件级别定义。
所以我想知道的是:是否有任何标准头文件定义这些类型?或者是否有一些每个人都使用的标准定义我应该复制?
我猜这些类型的可能和常见用途是表示坐标,我错了吗?
如果我想用这些来表示网格中的位置,还有什么我应该考虑的吗?是什么原因或为什么不使用它们?
编辑:
澄清:int2表示一对整数,float3表示浮动的三元组。
如果这些类型是在某处预定义的,那么使用它们会很好,而不必从头开始编写,包括标准代数函数(operator +,operator-等)。
答案 0 :(得分:20)
这些类型不是标准C ++的一部分。它们可能在某些第三方库中定义,或者您正在查看其他一些方言或语言。
GPU代码(像GLSL,Cg或HLSL这样的着色器语言,或者像CUDA或OpenCL这样的GPGPU)通常会定义类似这些类型的类型,作为相应SIMD数据类型的名称。
答案 1 :(得分:8)
它们用在CUDA(和openCL?)中,你有特定大小的浮点数和内存使用率,并且对齐是一个大问题。
答案 2 :(得分:1)
AFAIK没有定义这些类型的标准头文件。
根据您的说明int2
表示一对两个int
,可以用C ++表示为std::pair<int, int>
。
答案 3 :(得分:1)
我使用&lt; stdint.h&gt;中定义的POSIX类型。似乎每个人都为自己的名字定义了自己的名字,而且我有一个名字碰撞的项目。对于我来说,不为类型定义我自己的“宠物”名称已经成为一种新的范例。
答案 4 :(得分:0)
这些类型不标准,我从未见过它们。你确定它们不被用作(可怕的选择)标识符而不是类型吗?
一些非常可能的非标准类型是int32_t
,uint64_t
等。(这些是由C99指定的,因此大多数现代C ++编译器也允许您在C ++中使用它们。)