Wenn ich einen Std :: Vector habe, kann ich auf ein Mitglied zugreifen, weil der eckige Klammeroperator in der Vektorklasse überladen ist. Wenn ich einen Zeiger auf einen Vektor habe, kann ich den Zeiger dereferenzieren und diesen Operator verwenden. Aber mit dem Pfeil -> Operator wird es mich nicht benutzen lassen. Beispiel:Warum funktionieren [] Klammern nicht, wenn ein Zeiger dereferenziert wird?
std::vector<int> myVector;
std::vector<int>* pToVector;
myVector[4] = 0; // Works fine
(*pToVector)[4] = 0; // Works fine
pToVector->[4] = 0; // Doesn't work
(pToVector->)[4] = 0; // Doesn't work
sehen, als ob die -> Pfeil Bediener den Zeiger dereferenziert, gibt es einen Grund, nicht zu erwarten, dass dies funktionieren würde? Oder ist es nur eines dieser Dinge über die Sprache?
Danke.
Die ersten beiden Zuweisungen funktionieren möglicherweise, aber Sie greifen außerhalb der Containergrenzen zu, dh UB.Sie müssen es wie folgt deklarieren: 'std :: vector myVector (5)', das den notwendigen Platz für den Zugriff auf 'myVector [4] zuweist. Die letzten beiden sind ungültige Konstrukte –
doug
Es ist eine falsche Syntax. Der Pfeiloperator gibt Ihnen * objec. Struktur so pToVector -> [4] = 0 ähnlich wie * pToVector. [4] = 0. Weder diese Zeile (pToVector ->) [4] noch dieser pToVector -> [4] wird nicht funktionieren – arturx64
Warum erwarten Sie, dass es funktioniert? "a-> b" bedeutet "(* a) .b". Also kann "a -> [b]' "(* a). [] Bedeuten, was keinen Sinn ergibt. – HolyBlackCat