如果我想在C++中定义一个Matrix
类,例如对于OpenGL渲染,我喜欢的方式(似乎也是最方便的)是首先定义一个Vector
类,如下所示:
class vec3 {
double x;
double y;
double z;
[ ... ]
}
class vec4 {
double x;
double y;
double z;
double w;
[ ... ]
}
现在,据我了解,当我创建vec {3 | 4}时,
x, y, z{, w}
的值应该在内存中是连续的(正确的???)。如果然后我这样创建矩阵:
class mat3 {
vec3 _m[3];
[ ... ]
}
class mat4 {
vec4 _m[4];
[ ... ]
}
矩阵类中每个 vector 的
x, y, z{, w}
的值在内存中是否总是彼此相邻?如果我将第一个元素的地址提供给OpenGL,OpenGL会读取内存中的下16个值(对于4x4矩阵),它将按顺序读取矩阵的16个值,还是可以从程序中的其他位置获取其他信息在路上?编辑(2019年11月29日):修正了一个错字
最佳答案
该语言可能无法保证如此,但实际上可能会是连续的。
在C++中未定义对成员建立索引的行为。 API可能是用C编写的,可能具有不同的规则。
有一个可以迭代的数据结构,可以保证有16个相邻元素:16个 double 数组。
关于c++ - 在C++中,默认情况下如何安排结构的内存结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59104102/