Tôi đã có bộ não của tôi nhăn từ cố gắng tìm hiểu các ví dụ trên trang này: http://answers.yahoo.com/question/index?qid=20091103170907AAxXYG9Thứ tự đánh giá biểu thức khác nhau giữa C++ và Java như thế nào?
Cụ thể hơn mã này:
int j = 4;
cout << j++ << j << ++j << endl;
đưa ra một sản lượng: 566
Bây giờ này có ý nghĩa với tôi nếu biểu thức được đánh giá từ phải sang trái, tuy nhiên trong Java một biểu thức tương tự:
int j = 4;
System.out.print("" + (j++) + (j) + (++j));
cho kết quả là: 456
Điều này trực quan hơn vì điều này cho biết nó được đánh giá từ trái sang phải. Nghiên cứu này trên các trang web khác nhau, có vẻ như rằng với C + + hành vi khác nhau giữa các trình biên dịch, nhưng tôi vẫn không thuyết phục tôi hiểu. Giải thích cho sự khác biệt này trong đánh giá giữa Java và C++ là gì? Cảm ơn SO.
Mọi thứ đều khác nhau. Nó không chỉ khác nhau giữa các trình biên dịch, nó là _against các rules_, và có thể thay đổi mỗi khi bạn biên dịch trên cùng một trình biên dịch, mỗi khi bạn chạy chương trình, hoặc thậm chí mỗi lần dòng được thực hiện. –
có thể trùng lặp của [Cách xác định không xác định là hành vi không xác định?] (Http://stackoverflow.com/questions/7961067/how-undefined-is-undefined-behavior) –
C++ được thiết kế để được tối ưu hóa, có nghĩa là tiêu chuẩn không đảm bảo kết quả nhất định để trình biên dịch được tự do tạo mã tối ưu. Trình tự bạn sử dụng trong ví dụ của mình là một chuỗi mà tôi tin là không được phép cụ thể. –