int a = 10;
int b = ++a + ++a + ++a;
khi mình cho chạy, thì ra kế quả là 37 mình không hiểu sao nữa. Mọi người ai biết chỉ mình với. thanks!
int a = 10;
int b = ++a + ++a + ++a;
khi mình cho chạy, thì ra kế quả là 37 mình không hiểu sao nữa. Mọi người ai biết chỉ mình với. thanks!
Có mùi Undefined Behavior…
Đúng vậy, không thể nghĩ bàn
C++ mở lỏng hơn chút với ++a (buộc side-effect tính trước) nhưng a++ thì vẫn vậy. Vì vậy đừng ai nói C++ là em của C
Bác nói rõ tí được k :))
sequence point là gì ? e GG đọc vẫn chưa thông.
side-efect là j ?
Link này nói cả sequence point và side-effect:
Trích từ N1256:
Theo 5.1.2.3, mục 2: side effect là bất cứ thay đổi môi trường nào, bao gồm thay đổi biến, sửa bất cứ thứ gì liên quan đến file và tính toán dấu phẩy động.
Cũng theo mục 2, sequence point là điểm được đảm bảo là các side effect trước đó đã phải được thực hiện hết và không có side effect nào mới. Xem phụ lục C để xác định đâu là sequence point.
Kết thúc một câu lệnh là một sequence point.
Sau khi tính toán hạng thứ nhất của && || ? (tam phân) và , là sequence point. Nghĩa là i? i++ : i--
là undefined.
Sau khi hàm thư viện trả về là sequence point.
Hi Trọng Dũng.
Cái này có thể coi là hạn chế của ngôn ngữ. Với một biểu thức như của bạn thì kết quả phụ thuộc vào cách trình biên dịch sinh mã máy và đôi khi ra các kết quả không dự đoán trước được.
Undefined Behavior