etwas zu tun, wie dies scheint ganz gut zu funktionieren:
Das bedeutet nicht, es ist OK.
Bitte http://c-faq.com/ansi/experiment.html lesen, die eine große Analogie von Roger Miller hat.
„Jemand sagte mir, dass im Basketball Sie nicht den Ball halten können und laufen bekam ich einen Basketball und versuchte es und es funktionierte gut "Er hat Basketball offensichtlich nicht verstanden."
Zugriff auf v[10]
ist undefiniertes Verhalten. Es spielt keine Rolle, ob Sie eine Member-Funktion aufrufen, selbst der Zugriff auf v[10]
ist nicht definiert. (Und wie im Kommentar erwähnt, wird der Objektausdruck auch beim Aufruf einer statischen Elementfunktion ausgewertet, was IMHO offensichtlich sein sollte, weil v[10]
nicht in einem nicht bewerteten Kontext wie sizeof(v[10])
oder decltype(v[10])
verwendet wird).
Sie können nicht C++ Code mit der Ansicht schreiben "das scheint gut zu funktionieren" und davon ausgehen, dass das Programm korrekt ist.
Es ist legal. Wenn 'bar()' nicht statisch wäre, wäre es natürlich immer noch legal. –
UB aufgrund des Zugriffs auf ein nicht vorhandenes Element von 'std :: vector'. –
Der Aufruf der Funktion ist irrelevant, 'v [10]' ist UB bereits. –