Có rất nhiều câu hỏi thú vị nâng here về hành vi không xác định trong C. Một trong số đó là (chút thay đổi)Có 'a [i] = i;' luôn luôn dẫn đến hành vi được xác định rõ ràng?
Liệu các mảnh sau kết quả mã trong hành vi undefined?
int i = 0, *a = &i; // Line 1 a[i] = i + 1; // Line 2
Vì không có câu trả lời cụ thể cho phần này của câu hỏi đó, và tôi muốn biết hành vi trong C++, tôi nâng nó một lần nữa ở đây.
Rule # 2 từ Undefined Behavior and Sequence Points nói
Bên cạnh đó, giá trị trước khi được truy cập duy nhất để xác định giá trị được lưu trữ
Rõ ràng trong ví dụ trên, giá trị là được truy cập hai lần: a[i]
(lhs) và i
(rhs), và chỉ một trong số chúng (số rh) xác định giá trị được lưu trữ.
Dòng 2 có vi phạm quy tắc ở trên và dẫn đến hành vi không xác định trong C++ 03 không?
Có một số nhầm lẫn về việc liệu i
có được sửa đổi ở Dòng 2 không?
+ 1 cho cả C + +03 và C++ 11 câu trả lời. –