Heim >Backend-Entwicklung >C++ >Zeigt der Code der vierten Ausgabe der „Programmiersprache C' ein wohldefiniertes Verhalten?
Hat Code aus „The C Programming Language“ 4. Auflage ein wohldefiniertes Verhalten?
Der fragliche Code weist dennoch ein nicht spezifiziertes Verhalten auf kein undefiniertes Verhalten hervorruft. Dies liegt an der nicht spezifizierten Reihenfolge der Auswertung von Unterausdrücken, insbesondere im Hinblick auf die Aufrufe von s.replace().
Prinzip der Auswertung nicht spezifizierter Unterausdrücke
Funktion Argumente haben eine nicht spezifizierte Auswertungsreihenfolge, was bedeutet, dass die Auswertungsreihenfolge einzelner Funktionsargumente nicht angenommen werden kann. In diesem Fall wird nicht garantiert, dass die Argumente für s.find() vor oder nach s.replace() ausgewertet werden.
Auswirkungen auf die Reihenfolge der Auswertung
Je nachdem In der Auswertungsreihenfolge können die Ergebnisse von s.find() durch die Nebenwirkungen von s.replace() verändert werden. Dies liegt daran, dass s.replace() die Länge der Zeichenfolge ändert, was sich auf das Ergebnis nachfolgender s.find()-Aufrufe auswirkt.
Tatsächliche Bewertungsunterschiede
In der Wenn der Test bereitgestellt wird, wertet clang s.find("even") vor s.replace(0, 4, "") aus, während gcc sie möglicherweise in der umgekehrten Reihenfolge auswertet. Dieser Unterschied in der Reihenfolge führt zu unterschiedlichen Ergebnissen bei den verketteten Funktionsaufrufen.
C 17-Änderungen
In C 17 ist die Auswertungsreihenfolge für Postfix-Ausdrücke (wie Kettenaufrufe) wurde gestärkt. Die Initialisierung von Parametern (einschließlich Nebenwirkungen) in Funktionsargumenten erfolgt nun in unbestimmter Reihenfolge in Bezug auf andere Parameter. Dadurch wird sichergestellt, dass Code wie der betreffende Code ein genau spezifiziertes Verhalten aufweist.
Das obige ist der detaillierte Inhalt vonZeigt der Code der vierten Ausgabe der „Programmiersprache C' ein wohldefiniertes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!