2017-07-11 1 views

Antwort

4

Solch ein Vergleich ist wohlgeformt, aber sein Ergebnis ist nicht spezifiziert.

[expr.rel]/3 Zeiger auf Objekte Vergleich ist wie folgt definiert:

- Wenn zwei Zeiger auf verschiedene Elemente des gleichen Array zeigen, oder an Subobjekte davon, der Zeiger auf die Element mit dem höheren Index vergleicht größer.

- Wenn ein Zeiger auf ein Element eines Arrays oder auf ein Unterobjekt davon zeigt und ein anderer Zeiger auf ein Element nach dem letzten Element des Arrays zeigt, vergleicht der letztere Zeiger größer.

- Wenn zwei Zeiger rekursiv auf verschiedene nicht statische Datenelemente desselben Objekts oder auf Unterobjekte solcher Elemente verweisen, vergleicht der Zeiger auf das später deklarierte Element größer, vorausgesetzt, die beiden Elemente haben die gleiche Zugriffskontrolle (Klausel 11) und vorausgesetzt, ihre Klasse ist keine Gewerkschaft.

[expr.rel]/4 Wenn zwei Operanden pq und Vergleichen gleich (5.10), p<=q und p>=q sowohl Ausbeute als true und p<q und p>q beide false ergeben. Andernfalls, wenn ein Zeiger p größer als ein Zeiger vergleicht q, p>=q, p>q, q<=p und q<p alle Ausbeute true und p<=q, p<q, q>=p und q>p alle false ergeben. Ansonsten ist das Ergebnis jedes Operators nicht spezifiziert.

Ein Nullzeiger fällt nicht in eine der drei Klauseln von [expr.rel]/3 und so vergleicht sie weder größer noch kleiner als ein Nicht-Null-Zeiger. Dieser Fall fällt dann in den "anders" -Klausel von [expr.rel]/4.

+0

Sie haben p4 komplett verpasst. –

+0

@ T.C. Es gibt nichts Relevantes in p4 meiner Kopie von C++ 14. Gibt es in C++ 17 etwas Neues? –

+0

"Ansonsten ist das Ergebnis jedes Operators nicht spezifiziert." –

Verwandte Themen