2012-07-24 35 views
6

Khi tôi làm điều này: count = ++ count; Tại sao tôi nhận được cảnh báo - Việc gán cho số biến không có hiệu lực? Điều này có nghĩa là số lượng được tăng lên và sau đó được gán cho chính nó hoặc cái gì khác? Có giống như chỉ số lượng ++ không? Điều gì xảy ra trong count = count ++; ? Tại sao tôi không nhận được cảnh báo về điều này?Việc gán cho biến không có hiệu lực?

Trả lời

13

count++++count đều viết tắt là count=count+1. Bài tập được xây dựng trong, do đó, không có điểm để gán lại nó. Sự khác biệt giữa count++ (cũng biết như postfix) và ++count (còn gọi là tiền tố ) là ++count sẽ xảy ra trước phần còn lại của dòng, và count++ sẽ xảy ra sau khi phần còn lại của dòng.

Nếu bạn đã tháo count=count++, bạn sẽ kết thúc với điều này:

count = count; 
    count = count+1; 

Bây giờ bạn có thể thấy tại sao postfix sẽ không cung cấp cho bạn một cảnh báo: một cái gì đó thật sự đang được thay đổi ở cuối.

Nếu bạn tháo count=++count, bạn sẽ kết thúc với điều này:

count = count+1; 
    count = count; 

Như bạn có thể thấy, dòng thứ hai của mã là vô ích, và đó là lý do tại sao các trình biên dịch được cảnh báo bạn.

+0

Tôi đã nói ngắn gọn, không giống với. – LastStar007

+1

Phải - bạn trả lời ngắn gọn hơn khi tôi đưa ra nhận xét đó (đề cập đến giá trị được trả về bởi biểu thức). Bạn đã giải thích tuyệt vời ở đây +1 –

+0

tại sao không thông qua cảnh báo cho dòng đầu tiên trong ví dụ count = count ++? bởi vì điều đó không làm gì cả. – Thomas

3

Breaking báo cáo kết quả lên cơ bản bạn đang viết:

++count; 
count = count; 

Như bạn thấy count = count không có gì, vì thế mà cảnh báo.

3

toán tử ++ là lối tắt cho count = count + 1 sau. Nếu chúng tôi vi phạm dòng của bạn count = ++count, nó phản hồi lại count = count+1 = count

3

Để mở rộng một chút, hãy đếm + + là postfix. Nó diễn ra sau khi các hoạt động khác vì vậy nếu bạn đã làm một cái gì đó giống như

int a = 0, b = 0; 
a = b++; 

một sẽ là 0, b sẽ là 1. Tuy nhiên, ++ count là tiền tố nếu bạn đã làm

int a = 0, b = 0; 
a = ++b; 

sau đó a và b cả hai sẽ là 1. Nếu bạn chỉ làm

count++; 

hoặc

++count; 

thì không thành vấn đề, nhưng nếu bạn kết hợp nó với một thứ gì khác, nó sẽ

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