Sind die Operationen und ptr < nullptr
gut für einen Nicht-Null-RAW-Zeiger ptr != nullptr
definiert? Zitate aus dem C++ - Standard sind willkommen.Operator weniger als zwischen einem Nicht-Null-RAW-Pointer und Nullptr
Antwort
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
p
q
und Vergleichen gleich (5.10),p<=q
undp>=q
sowohl Ausbeute alstrue
undp<q
undp>q
beidefalse
ergeben. Andernfalls, wenn ein Zeigerp
größer als ein Zeiger vergleichtq
,p>=q
,p>q
,q<=p
undq<p
alle Ausbeutetrue
undp<=q
,p<q
,q>=p
undq>p
allefalse
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.
Sie haben p4 komplett verpasst. –
@ T.C. Es gibt nichts Relevantes in p4 meiner Kopie von C++ 14. Gibt es in C++ 17 etwas Neues? –
"Ansonsten ist das Ergebnis jedes Operators nicht spezifiziert." –
- 1. nullptr in ternärem Operator
- 2. Jess: Fehler mit Operator weniger als
- 3. ist der Operator + weniger performant als StringBuffer.append()
- 4. Weniger als Operator kann nicht als Mitglied Funktion
- 5. SQL Bereich Bedingungen weniger als, größer als und zwischen
- 6. "weniger als oder gleich" -Operator arbeitet nicht in Bedingung
- 7. Die Nullptr- und Zeigerarithmetik
- 8. Vergleichen Sie zwei Tabellen mit weniger als Operator in SQL
- 9. VB.NET wie Operator Verwirrung mit weniger-als-Zeichen in Muster
- 10. cassandra cql löschen auf eine weniger als Operator Sekundärschlüssel
- 11. Unterschied zwischen "neuer Operator" und "neuer Operator"?
- 12. C++ weniger Operator verwendet Konvertierungsoperator
- 13. Test auf Äquivalenz mit nur weniger als Operator?
- 14. Ist der Operator <(weniger als) auf Zeigern konsistent?
- 15. Verwenden Sie einen Operator zwischen einem Array und einem int
- 16. Größer als/weniger als zwischen den Elementen von zwei Arraylist
- 17. Spitzentyp von einem Nullptr abgeleitet?
- 18. C++: Unterschied zwischen dem Setzen eines Zeigers auf nullptr und dem Initialisieren als neuer Variablentyp
- 19. namespace std Überlastung weniger als
- 20. Glätte zwischen mehr und weniger anzeigen
- 21. T-SQL interpretiert "weniger als" als "weniger als oder gleich"
- 22. WÄHLEN WHERE Unterschied zwischen jetzt und einem Zeitstempel ist weniger als 24 Stunden
- 23. JavaScript: weniger als + mehr als
- 24. Debugger Throwing nullptr Ausnahme Während nullptr Überprüfen
- 25. Zeichen größer als/weniger als // Javascript
- 26. Operator <= C++ mehr weniger Fragezeichen Gleichheitszeichen
- 27. GCC ändert weniger als zu weniger als oder gleich
- 28. SQL-Zeichenfolge Vergleich, größer als und weniger als Operatoren
- 29. weniger als oder gleich
- 30. SQL Tabellenstruktur für häufige mehr als und weniger als Abfragen
Sie ergeben unspezifizierte Werte. –