Pointeroperationen assoziativ?
-
Also
std::vector<int> v(1243); int m = // Negativer Index eines Elements int *p1 = v.data() + m-1 + v.size(); // UB? int *p1 = v.data() + (m-1 + v.size()); // ok?Muss ich jetzt jedesmal die Klammern hinschreiben?
-
In C++ ist ueberhaupt nichts (a priori) assoziativ. Also wenn du nichts findest, das dafuer spricht, dann spricht alles dagegen.
-
Variante 1 sollte imo UB sein, Variante 2 sollte ok sein, solange der Ausdruck in Klammern einen gültigen Index in den vector ergibt.
-
std::vector::size() liefert einen
unsignedzurueck. Ist irgendwo spezifiziert, wiesignedundunsignedin einer Addidtion promoted werden. Persoenlich hatte ich da eine schlechte Erfahrung, dass das Ergebnis implizit einunsignedwar.
-
Es gibt allerdings die one-past-Regel, heißt
int* p1 = v.data() + v.size() + m - 1;geht klar.