Xét câu lệnh trong C/C++:
c = a+++b;
Ý nghĩa của dòng này là gì?
Giả sử a=2, b=5. Biểu thức có thể hiểu 2 cách:
- c = (a++) + b
- c = a + (++b)
Có toán tử hậu tố tăng và tiền tố tăng. Phụ thuộc vào cách dùng.
Hai khái niệm: độ ưu tiên (precedence) và tính kết hợp (associativity). Duyệt trái sang phải:
- c = (a++) + b → 2 + 5 = 7
- c = a + (++b) → 2 + 6 = 8
Kiểm tra trình biên dịch chọn cách nào:
Ví dụ
#include <iostream>
using namespace std;
int main() {
int a = 2, b = 5, c;
c = a+++b;
cout << "C is : " << c;
return 0;
}
Kết quả
C is : 7
Trình biên dịch chọn tùy chọn đầu tiên: c = (a++) + b (theo quy tắc maximal munch - ăn càng nhiều ký tự càng tốt).