Klasy przechowują elementy danych w pamięci sekwencyjnej?
Krótka wersja tego pytania: Czy wskaźnik do pierwszego elementu danych klasy powoduje wyświetlenie wskaźnika do wszystkich jego członków danych?
Dyskusja:
Czytam przykładowy kod i to jest interesujące. Kiedy określona funkcja (w tym przypadkuglUniformMatrix4fv
Funkcja C z OpenGL) przyjmuje jako parametr tablicę, która jest przekazywana we wspólny sposób C za pomocą wskaźnika na adres pierwszego elementu tablicy, w następujący sposób:
glUniformMatrix4fv(glvariable, 1, 0, &newmatrix[0]);
// odnosząc się do nowej macierzy
Ten programista ma klasę C ++ do tworzenia macierzy 4X4, co daje w sumie 16 elementów pływających. Jednak członkowie danych tej klasy są podzieleni na 4 osobne wektory po 4 członków danych:
Oto członkowie danych klasy:
vec4 x;
vec4 y;
vec4 z;
vec4 w;
Thevec4
klasa z kolei zapewnia tych członków danych:
T x;
T y;
T z;
T w;
Następnie tworzy funkcję wskazującą tylko pierwsząvec4 x
członek danych:
const T* Pointer() const
{
return &x.x;
}
I jakoś to cudownie przekłada się na wysyłanie wszystkich 4vec4
obiekty i ich odpowiednie 4 komponenty:
glUniformMatrix4fv(modelviewUniform, 1, 0, modelviewMatrix.Pointer());
Jestem dość nowy w C ++, ale zaskoczyło mnie to, że można wskazać tylko jednego członka danych i oczekiwać, że cała reszta zostanie wysłana. Czy dlatego, że klasa definiuje je w określonej kolejności? Co jeśli zostały zdefiniowane w innej kolejności w definicji klasy?