Ưu tiên không có ảnh hưởng đến thứ tự đánh giá (trừ khi cần thiết - một số biểu thức phụ có thể cần phải được đánh giá trước những người khác do ưu tiên). Ví dụ, trong biểu thức đơn giản:
a() + b() + c() * d()
mặc dù nhân có ưu tiên hơn Thêm vào đó, trình biên dịch là miễn phí để thực hiện các cuộc gọi đến các chức năng trong bất kỳ thứ tự nó thích, và có thể gọi a()
hoặc b()
trước hoặc sau nó thực hiện phép nhân. Rõ ràng, nó phải đánh giá c()
và d()
trước khi nó thực hiện phép nhân. Nếu các hàm này có các tác dụng phụ (như sửa đổi và sử dụng các biến toàn cầu), thứ tự đánh giá không xác định có thể dẫn đến kết quả không mong muốn.
Tuy nhiên, đối với một số nhà khai thác, tiêu chuẩn này quy định một thứ tự đánh giá nghiêm ngặt. Điều này để nói về nhà điều hành hoặc hợp lý ||
:
Không giống như bitwise | toán tử || nhà điều hành đảm bảo đánh giá từ trái sang phải; có một điểm chuỗi sau khi đánh giá toán hạng đầu tiên. Nếu toán hạng đầu tiên so sánh không bằng với 0, toán hạng thứ hai không được đánh giá.
Vì vậy, không chỉ ||
cung cấp đảm bảo đặt hàng, nó cũng đảm bảo rằng trong các điều kiện nhất định, toán hạng thứ hai sẽ không được đánh giá.
(nó cũng nói điều gì đó tương tự cho &&
- ngoại trừ trường hợp đó toán hạng thứ 2 không được đánh giá nếu lần đầu tiên đánh giá 0. Nhưng trong ví dụ của bạn, ||
xuất hiện trước).
Các toán tử khác cung cấp một số đảm bảo đặt hàng bao gồm toán tử dấu phẩy và cuộc gọi hàm (đảm bảo rằng đối số đã được đánh giá, nhưng không phải thứ tự các đối số đã được đánh giá).
Nguồn
2010-10-12 15:20:53
Bạn có nghĩa là LHS. – SLaks
@SLaks: Vâng, tôi có. Đã chỉnh sửa. – sepp2k