2012-11-07 18 views
13

C++ 03 Tiêu chuẩn 1,9/6 định nghĩa hành vi quan sát:Các tác dụng phụ và hành vi quan sát có liên quan như thế nào trong C++?

Các hành vi quan sát của máy trừu tượng là chuỗi của đọc và ghi dữ liệu dễ bay hơi và các cuộc gọi đến thư viện chức năng I/O.

và sau đó và sau đó 1,9/7 định nghĩa tác dụng phụ:

Tiếp cận một đối tượng được chỉ định bởi một giá trị trái dễ bay hơi (3.10), sửa đổi một đối tượng, gọi một thư viện I/O chức năng, hoặc gọi một hàm thực hiện bất kỳ hoạt động nào là tất cả các tác dụng phụ, đó là những thay đổi trong trạng thái của môi trường thực thi.

Tác dụng phụ có phải là hành vi có thể quan sát hay không? Họ liên hệ với nhau như thế nào?

Trả lời

14

Không, tác dụng phụ không nhất thiết là hành vi quan sát được. Sửa đổi một đối tượng không bay hơi, ví dụ, là một tác dụng phụ, nhưng không thể quan sát được. Sự khác biệt quan trọng bởi vì các hiệu ứng phụ có thể được sắp xếp lại hoặc loại bỏ hoàn toàn bởi trình biên dịch, miễn là hành vi quan sát vẫn giữ nguyên.

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

Hầu hết các trình biên dịch, nếu được yêu cầu, hãy xóa hoàn toàn a. Điều đó được cho phép. Các bài tập và bổ sung không thể quan sát được.

Tất cả hành vi có thể quan sát phải nhất thiết là tác dụng phụ.