++ và -- là toán tử một ngôi (unary). Cả tiền tố (++i) và hậu tố (i++) đều tăng biến lên 1. Khác biệt nằm ở giá trị của biểu thức.
Khi dùng độc lập
i = 5; i++; // i = 6 i = 5; ++i; // i = 6 // Kết quả cuối cùng giống nhau
Khi dùng trong biểu thức/gán (ưu tiên toán tử)
| Biểu thức | Giá trị biểu thức | Giá trị i sau |
|---|---|---|
j = i++; | Giá trị cũ của i | i + 1 |
j = ++i; | Giá trị mới của i | i + 1 |
Ví dụ minh họa
#include <stdio.h>
int main() {
int i = 5, j;
j = i++;
printf("Hau to: i=%d, j=%d\n", i, j); // i=6, j=5
i = 5;
j = ++i;
printf("Tien to: i=%d, j=%d\n", i, j); // i=6, j=6
return 0;
}
Hau to: i=6, j=5 Tien to: i=6, j=6
Quy tắc ưu tiên: ++i (prefix) có độ ưu tiên cao hơn =. i++ (postfix) có độ ưu tiên cao hơn = nhưng giá trị biểu thức là giá trị trước khi tăng.
Khuyến nghị: Dùng ++i khi không cần giá trị cũ (tiết kiệm bản sao tạm, thói quen tốt cho iterator C++).