如果我想在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,Op​​enGL会读取内存中的下16个值(对于4x4矩阵),它将按顺序读取矩阵的16个值,还是可以从程序中的其他位置获取其他信息在路上?

编辑(2019年11月29日):修正了一个错字

最佳答案



该语言可能无法保证如此,但实际上可能会是连续的。



在C++中未定义对成员建立索引的行为。 API可能是用C编写的,可能具有不同的规则。

有一个可以迭代的数据结构,可以保证有16个相邻元素:16个 double 数组。

关于c++ - 在C++中,默认情况下如何安排结构的内存结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59104102/

10-12 21:24