Tôi đang chạy các chương trình sau trong Visual C++ và Java:Hành vi của PreIncrement và PostIncrement điều hành trong C và Java
Visual C++
void main()
{
int i = 1, j;
j = i++ + i++ + ++i;
printf("%d\n",j);
}
Output:
6
Java:
public class Increment {
public static void main(String[] args) {
int i = 1, j;
j = i++ + i++ + ++i;
System.out.println(j);
}
}
Output:
7
Tại sao đầu ra trong hai ngôn ngữ này là khác nhau? Làm thế nào cả hai ngôn ngữ xử lý các toán tử trước và sau phát hành khác nhau?
Trong C và C++, thứ tự các biểu thức được đánh giá và thứ tự mà các hiệu ứng phụ được áp dụng là * không xác định *; kết quả sẽ thay đổi từ triển khai sang triển khai. Các tiêu chuẩn tương ứng để lại hành vi như vậy * undefined * để trình biên dịch trình biên dịch không phải lo lắng về cách xử lý các biểu thức như vậy; bất kỳ kết quả nào được coi là "chính xác". Java và C#, OTOH, chỉ định rằng tất cả các biểu thức được đánh giá từ trái sang phải, và tất cả các hiệu ứng phụ được áp dụng ngay lập tức, vì vậy các biểu thức như thế này được xác định rõ. –