2017-01-03 4 views

Antwort

14

Die Frage ist strittig. Zeigerarithmetik wird nur auf den Zeigern definiert, die zu demselben Array gehören, was dort sicherlich nicht der Fall ist. Also, der Code oben ist nicht legal C++, und in der Tat, kompiliert nicht mit Compilern für mich verfügbar.

+0

Oder zwei Nullzeiger IIRC, die auch sicherlich nicht der Fall. – hvd

+1

Also habe ich den Wortlaut überinterpretiert? Yep Ich testete es auch, aber ich habe gelernt, dass die Tatsache, dass etwas nicht kompiliert in gegebenen Compiler nicht wirklich meen es eigentlich nicht legal ist daher die Frage :) –

+0

@hvd, ich erinnere mich nicht an irgendeine Ausnahme für Nullzeiger in Bezug auf die Subtraktion , aber meine Erinnerung kann mich verfehlen. Wären Sie so freundlich, ein Angebot zu machen? – SergeyA

3

Die zitierte cppref article sagt

Ein Kern konstanter Ausdruck einen beliebigen Ausdruck ist, der keine eine der folgenden Möglichkeiten hat ..

7) Ein Ausdruck, dessen Auswertung führt zu irgendeiner Form von Kern Sprache (seit C++ 17) undefiniertes Verhalten (einschließlich vorzeichenbehafteter Integer-Überlauf, Division durch Null, Zeiger arithmetische außerhalb Array gebunden s, etc). Ob nicht definiertes Standardbibliotheksverhalten erkannt wird, ist nicht angegeben. (Da C++ 17)

19) eine Subtraktion Operator zwischen zwei Zeigern (bis C++ 14)

Wahrscheinlichkeit nur Array ptr arithemtics innerhalb Arraygrenzen wird immer 'legalisiert', da C++ 14 nicht alle Zeiger arithmetics


Tatsächlich zeigt ein demo dass Array ptr arithmetics Ordnung auch mit C++ kompiliert 11 (nicht C++ 98)

Verwandte Themen