2012-11-07 8 views
13

C++ 03 Standard-1,9/6 definiert beobachtbares Verhalten:Wie hängen Nebenwirkungen und beobachtbares Verhalten in C++ zusammen?

Das beobachtbare Verhalten der abstrakten Maschine ist die Folge von liest und schreibt auf flüchtige Daten und ruft Bibliothek I/O-Funktionen.

und dann und dann 1,9/7 definiert Nebenwirkungen:

durch ein flüchtiges lvalue bezeichnet Zugriff auf ein Objekt (3,10), um ein Objekt zu modifizieren, den Aufruf einer Bibliotheks I/O-Funktion oder Das Aufrufen einer Funktion, die eine dieser Operationen ausführt, sind alle Nebeneffekte, die Änderungen im Status der Ausführungsumgebung sind.

Ist ein Nebeneffekt ein beobachtbares Verhalten oder nicht? Wie sind sie miteinander verwandt?

Antwort

14

Nein, ein Nebeneffekt ist nicht unbedingt beobachtbares Verhalten. Das Ändern eines nichtflüchtigen Objekts ist beispielsweise ein Nebeneffekt, aber nicht beobachtbar. Der Unterschied ist wichtig, da die Nebenwirkungen vom Compiler neu angeordnet oder entfernt werden können, solange das beobachtbare Verhalten gleich bleibt.

int main() 
{ 
    int a; 
    a = 30; 
    a += 2; 
    return 0; 
} 

Die meisten Compiler werden, falls gewünscht, entfernen a vollständig. Das ist erlaubt. Die Zuordnungen und die Addition sind nicht beobachtbar.

Alles beobachtbare Verhalten muss notwendigerweise ein Nebeneffekt sein.

Verwandte Themen