Ich mache eine einfache Klasse für Objekte vom Typ Vector3D. Der folgende Code wird kompiliert und perfekt ausgeführt.Klammeroperator als Elementfunktion überladen
class Vector3D {
float x, y, z;
public:
Vector3D() = default;
Vector3D(float a, float b, float c) : x(a), y(b), z(c) {};
float& operator [](int i) {
return (&x)[i];
}
const float& operator [](int i) const {
return (&x)[i];
}
}
int main(int argc, char ** argv){
Vector3D myVec(1,2,3);
printf("Value of y: %d\n", myVec[1]);
}
aber wenn ich entfernen Sie den Adressoperator (&) Ich erhalte eine Fehlermeldung, und der Code wird nicht funktionieren. Warum ist die (&) notwendig? d. h .:
return (x)[i]; // will not compile "expression must have pointer-to-object type"
return (&x)[i]; // all good here
Auch ich habe Probleme zu verstehen, wie das überhaupt funktioniert. Wie kann es sein, dass die Funktion den i-ten Float zurückgibt, werden Member-Variablen zusammenhängend im Speicher gespeichert (wie Arrays)?