Đề bài chủ ý giúp bạn hiểu được c++ và ++c khác nhau như thế nào. Cụ thế nếu bạn làm theo yêu cầu đề bài thì c++ = 10 báo lỗi vì c = c+1 = 10 mà c không có giá trị khởi tạo nên không tăng được, ++c = 10 thì c+1 = 10 = c nên sẽ in ra c = 10. Đó là cách hiểu của mình nhé
Cụ thể về vụ này bạn tham khảo topic này xem sao Khác biệt giữa i++ và ++i
Ko phải là gán vào hay chưa gán mà là ++i trả về một lvalue, còn i++ trả về một rvalue, mà rvalue không gán được, vì vậy báo lỗi.
Vì sao i++ lại là rvalue? Vì giá trị trả về của i++ chỉ đúng trong một thời gian rất ngắn, nên nó sinh ra chỉ để dùng một lần duy nhất, sau đó nó vô dụng. Nếu i là một đối tượng thì bạn sẽ thấy ngay vấn đề: bạn phải copy rồi trả về, thay vì trả về *this.
Undefined behavior chắc rồi, cái toán tử ++ này mỗi chương trình biên dịch theo một kiểu á, nhiều khi mình thử viết sáng Assembly thì có nhiều bài toán không biết viết cách nào cho chuẩn luôn mà
Vì bạn khai báo biến
c
nhưng chưa khởi tạo giá trị cho nó nên không thể++
lên được, cách fix:thế cái đề bài sao nó lại bảo chạy như vậy bạn
Đề bài chủ ý giúp bạn hiểu được c++ và ++c khác nhau như thế nào. Cụ thế nếu bạn làm theo yêu cầu đề bài thì c++ = 10 báo lỗi vì c = c+1 = 10 mà c không có giá trị khởi tạo nên không tăng được, ++c = 10 thì c+1 = 10 = c nên sẽ in ra c = 10. Đó là cách hiểu của mình nhé
Cụ thể về vụ này bạn tham khảo topic này xem sao Khác biệt giữa i++ và ++i
Ko phải là gán vào hay chưa gán mà là ++i trả về một lvalue, còn i++ trả về một rvalue, mà rvalue không gán được, vì vậy báo lỗi.
Vì sao i++ lại là rvalue? Vì giá trị trả về của i++ chỉ đúng trong một thời gian rất ngắn, nên nó sinh ra chỉ để dùng một lần duy nhất, sau đó nó vô dụng. Nếu i là một đối tượng thì bạn sẽ thấy ngay vấn đề: bạn phải copy rồi trả về, thay vì trả về
*this
.Undefined behavior chắc rồi, cái toán tử ++ này mỗi chương trình biên dịch theo một kiểu á, nhiều khi mình thử viết sáng Assembly thì có nhiều bài toán không biết viết cách nào cho chuẩn luôn mà