2011-02-05 36 views

Trả lời

31

trả lời cho câu hỏi của bạn
số

gì sẽ xảy ra
này sẽ xảy ra:

int x = 1; /* ASSUME THIS IS SO */ 
y = x = x + 1; 

/* Results: */ 
y == 2; 
x == 2; 

Làm thế nào nó biên dịch
Giống như:

x += 1; 
y = x; 

Tại sao điều này không phải là không xác định
Bởi vì bạn đang không viết x trong cùng một biểu bạn đọc nó. Bạn chỉ cần đặt chính nó là + 1, sau đó chỉ định y cho giá trị x.

của bạn trong tương lai
Nếu bạn tìm thấy mã khó hiểu bạn có thể sử dụng dấu ngoặc đơn để có thể đọc:

y = x = (x + 1); 
+2

Chỉ với thông tin của bạn, muntoo, vì "giá trị trả lại" của bài tập là giá trị riêng, bạn cũng có thể sử dụng nó cho những thứ khác, như 'if (1 == x = 1)', là một điều khá phổ biến lỗi và lý do, các nhà phát triển thích viết '1 == x' thay vì' x == 1' (vì bạn không thể gán x thành 1). – anroesti

+34

Các nhà phát triển duy nhất tôi biết những người viết những thứ như '1 == x' là những người tôi sẽ không làm việc với ... –

+19

@andre: Không," nhà phát triển "không thích viết điều đó. Đó là tổng, ô uế, và vô dụng; chỉ cần tham gia thập kỷ qua và bật cảnh báo trình biên dịch của bạn. – GManNickG

9

số Bạn chỉ sửa đổi x một lần, và do phải kết hợp của = rằng việc chuyển nhượng xảy ra trước khi giao cho y. Ngay cả khi điều đó xảy ra sau đó, vẫn chỉ có một sửa đổi là x. Tuyên bố của bạn là hợp pháp như y = ++x.

17

Không, cụm từ của bạn được xác định chính xác. Có thể bạn đang tìm kiếm y = x = x++;, không phải như vậy.

+0

Chẳng phải 'y = x = x ++;' bằng 'y = x = x; x + = 1; '? Tại sao điều đó không được xác định đúng? – rzetterberg

+0

Hoặc nó sẽ tương đương với 'y = x = x + 1; x + = 1; 'hoặc tới' y = x + 1 = x; x + = 1; '? –

+0

Tôi đã hỏi vì tôi không chắc chắn và tôi muốn biết tại sao 'x + 1' là ok, nhưng' x ++ 'thì không. – rzetterberg

Các vấn đề liên quan