2012-11-07 14 views
13

C++ 03 standard 1,9/6 określa zaobserwowania zachowania:Jakie są skutki uboczne i obserwowalne zachowania związane z C++?

Zauważalny zachowanie abstrakcyjnej maszyny jest jej sekwencja odczytuje i zapisuje dane lotnych i wzywa do biblioteki funkcje I/O.

i i 1,9/7 określa efekty uboczne:

Dostęp do obiektu wyznaczony przez lotny lwartości (3,10), modyfikacji obiektu, wywołanie biblioteka I/funkcja O lub wywoływanie funkcji wykonującej dowolną z tych operacji to wszystkie efekty uboczne, które są zmianami w stanie środowiska wykonawczego.

Czy efektem ubocznym jest obserwowalne zachowanie, czy nie? W jaki sposób są ze sobą spokrewnieni?

Odpowiedz

14

Nie, efekt uboczny niekoniecznie musi być obserwowalny. Modyfikowanie nieulotnego obiektu, na przykład, jest efektem ubocznym, ale nie można go zaobserwować. Różnica ma znaczenie, ponieważ skutki uboczne mogą być uporządkowane lub usunięte w całości przez kompilator, o ile obserwowalne zachowanie pozostaje takie samo.

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

Kompletna kompilacja będzie, na żądanie, całkowicie usunąć a. To jest dozwolone. Przydziały i dodatki nie są obserwowalne.

Wszelkie obserwowalne zachowanie musi być koniecznie efektem ubocznym.