Ich habe mich entschlossen, diese Antwort offen zu lassen, da C- und C ++ - Implementierungen normalerweise eng miteinander verbunden sind, aber tatsächlich nicht dem C-Standard entspricht, wie ich dachte. Der Punkt bleibt, dass der C ++ - Standard nicht spezifiziert, was in solchen Fällen passiert. Es ist auch wichtig, dass Nicht-Zweier-Komplement-Darstellungen in der realen Welt äußerst selten sind und dass sie, selbst wenn sie existieren, den Unterschied in vielen Fällen oft verbergen, anstatt ihn als etwas zu entlarven, das jemand leicht erwarten könnte, zu entdecken.
Das Verhalten negativer Nullen in den Ganzzahldarstellungen, in denen sie existieren, ist im C ++ - Standard nicht so streng definiert wie im C-Standard. Es wird jedoch die C-Norm (ISO / IEC 9899: 1999) als normative Referenz auf höchster Ebene angeführt [1.2].
Im C-Standard [6.2.6.2] kann eine negative Null nur das Ergebnis von bitweisen Operationen oder Operationen sein, bei denen bereits eine negative Null vorhanden ist (z. B. Multiplizieren oder Teilen einer negativen Null mit einem Wert oder Hinzufügen einer negativen Null zu Null) - Wenn Sie den unären Minusoperator auf einen Wert einer normalen Null anwenden, wie in Ihrem Beispiel, wird daher garantiert eine normale Null erhalten.
Selbst in den Fällen, in denen eine negative Null erzeugt werden kann , gibt es keine Garantie dafür, selbst auf einem System, das eine negative Null unterstützt:
Es ist nicht spezifiziert, ob diese Fälle tatsächlich eine negative Null oder eine normale Null erzeugen und ob eine negative Null eine normale Null wird, wenn sie in einem Objekt gespeichert wird.
Daher können wir schließen: Nein, es gibt keinen zuverlässigen Weg, um diesen Fall zu erkennen. Auch wenn nicht die Tatsache, dass Darstellungen ohne Zweierkomplement in modernen Computersystemen sehr ungewöhnlich sind.
Der C ++ - Standard erwähnt seinerseits den Begriff "negative Null" nicht und diskutiert die Details der vorzeichenbehafteten Größe und der eigenen Komplementdarstellungen nur sehr wenig, mit Ausnahme der Anmerkung [3.9.1 Abs. 7], dass sie zulässig sind.