3 Stimmen

Kann jemand diese C++-Notation erklären?

if (vector1.x > ((float*)&vector1)[j])

Ist j einfach nur ein Index für den Vektor?
Ist C++ z. B. in der Lage, diese Werte mit Hilfe der Array-Notation abzurufen, obwohl Vector kein Array ist?
Wenn ja, dann vermute ich, dass es dies durch Verweis auf Vektor durch seine Adresse?

11voto

Johannes Schaub - litb Punkte 479831

Der C++-Standard besagt, dass das Casting des Zeigers einer (pods)-Struktur auf einen Zeiger vom Typ ihres ersten Elements einen Zeiger auf ihr erstes Element ergibt:

struct a {
    float a1;
    float a2;
    float a3;
};

a o1; ((float*)&o1); // points to o1.a1

Ich vermute, dass der Compiler durch diesen Code angewiesen wurde, keine Füllung zwischen a1, a2 und a3 einzufügen, so dass der Zeiger, wenn er indiziert wird, genau auf den gewünschten Float zeigt. Also oben

((float*)&o1)[1] // *would* return o1.a2

Das ist plattformabhängig, da Padding in Standard-C++ nicht geändert werden kann. Schauen Sie nach, wie der Code es anordnet, und ob ich überhaupt richtig bin :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X