2011-09-13 30 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

Tại sao số lượng bài đăng không thành công? Tôi thấy nó xảy ra nhưng không chắc chắn về lý do kỹ thuật.Nhà điều hành tăng sau +

+2

tăng sau tạm thời? – Benoit

+0

Loại 'x' là gì? Điều đó rất quan trọng. Nếu nó là một built-in, 'operator ++' không phải là một cuộc gọi hàm. – MSalters

+0

Của nó được xây dựng trong nói, int x = 5; – user835194

Trả lời

13

x++ trả về một giá trị để bạn không thể thực hiện lại ++ trên đó. Mặt khác, ++x trả về một giá trị để bạn có thể thực hiện ++ trên đó.

+1

cũng thấy [câu hỏi này] (http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

Đây là cách toán tử tăng hoạt động trong C/C++.

Nếu bạn đặt ++ sau biến (tăng số postfix), toàn bộ biểu thức sẽ tính giá trị của biến trước khi tăng.

Nếu bạn đặt ++ trước biến (tiền tố tăng), biểu thức sẽ tính giá trị sau thao tác gia tăng.

Trong khi hoạt động tiền tố trả về tham chiếu đến biến được truyền, phiên bản postfix trả về giá trị tạm thời, không được tăng lên.

1

Chính xác. yo không thể thực hiện một ++ trên Rvalue. một lời giải thích tốt về cách làm việc rvalue được đưa ra here.