Tiêu chuẩn ISO không đảm bảo thứ tự các biểu thức con sẽ được đánh giá.
Từ C++ 0x dự thảo tiêu chuẩn:
1,9. Chương trình thực hiện:
:
13/ tiếp nối theo trước khi là một bất đối xứng, bắc cầu, mối quan hệ cặp-khôn ngoan giữa đánh giá thực hiện bởi một chủ đề duy nhất, mà gây ra một trật tự một phần trong số những người đánh giá. Đưa ra hai đánh giá A và B, nếu A được sắp xếp trước B, thì việc thực hiện A sẽ đứng trước việc thực hiện B. Nếu A không được sắp xếp trước khi B và B không được giải trình tự trước A, thì A và B không được kết nối. [Lưu ý: Việc thực hiện các đánh giá không được tuân thủ có thể trùng lặp.]
Đánh giá A và B được sắp xếp theo trình tự xác định khi A được sắp xếp trước khi B hoặc B được sắp xếp trước A, nhưng không xác định. [Lưu ý: đánh giá Indeterminately trình tự không thể trùng nhau, nhưng một trong hai có thể được thực hiện đầu tiên.]
:
15/ Trừ khi có ghi chú, đánh giá của toán hạng của các nhà khai thác cá nhân và của subexpressions của biểu thức cá nhân là không có kết quả.
:
Khi gọi một hàm (có hoặc không có chức năng là inline), mỗi giá trị tính toán và phụ ảnh hưởng kết hợp với bất kỳ biểu hiện lý luận, hoặc với biểu thức postfix chỉ định hàm được gọi, được lập trình tự trước khi thực hiện mọi biểu thức hoặc câu lệnh trong phần thân của hàm được gọi [Chú thích: Nói cách khác, các phép thực hiện hàm không xen kẽ nhau]. [Lưu ý: Các tính toán giá trị và các tác dụng phụ liên quan đến các biểu thức đối số khác nhau không được tuân thủ.]
Mọi đánh giá trong chức năng gọi điện (bao gồm các cuộc gọi chức năng khác) không được giải trình cụ thể trước hoặc sau khi thực hiện phần thân chức năng được sắp xếp không xác định đối với việc thực thi hàm được gọi.
Nói cách khác, việc triển khai sẽ miễn phí để sắp xếp các cuộc gọi bằng bất kỳ phương pháp nào họ muốn. Tuy nhiên, các cuộc gọi chức năng được xử lý đặc biệt theo chú thích - chúng thực hiện không phải xen kẽ.
Có lẽ bạn có lỗi đánh máy trong mã đó ... Tôi thấy hai khai báo 'hàm1'. – dmckee
Điều này sẽ không biên dịch bạn đang thiếu chức năng thứ hai! Đổi tên hàm thứ hai thành hàm2(). – Secko
@dmckee đã sửa lỗi đánh máy. – Raghvan