2012-11-07 17 views
13

C++ 03 standard 1.9/6 definisce comportamento osservabile:Come sono correlati gli effetti collaterali e il comportamento osservabile in C++?

Il comportamento osservabile della macchina astratta è la sua sequenza di letture e scritture di dati volatili e chiede alla libreria funzioni di I/O.

e poi e poi 1,9/7 definisce effetti collaterali:

Accesso a un oggetto designato da un Ivalue volatile (3.10), modifica di un oggetto, chiamando un libreria di I/O Funzione, o chiamare una funzione che fa una di queste operazioni sono tutti gli effetti collaterali, che sono cambiamenti nello stato dell'ambiente di esecuzione.

È un effetto collaterale un comportamento osservabile o no? Come si relazionano tra loro?

risposta

14

No, un effetto collaterale non è necessariamente un comportamento osservabile. La modifica di un oggetto non volatile, ad esempio, è un effetto collaterale, ma non osservabile. La differenza è importante perché gli effetti collaterali possono essere riorganizzati o rimossi del tutto dal compilatore, a patto che il comportamento osservabile rimanga lo stesso.

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

La maggior parte dei compilatori, se richiesto, rimuovere a completamente. È permesso. I compiti e le aggiunte non sono osservabili.

Tutti i comportamenti osservabili devono necessariamente essere un effetto collaterale.

Problemi correlati