Tôi tin rằng câu trả lời đúng cho câu hỏi này là trình biên dịch không (thường) tối ưu hóa đánh giá boolean, đơn giản là do để ngắn mạch logic, ví dụ:
if (GetFlagA() || GetFlagB())
{
...do something
}
Trình tự rằng nếu đánh giá thực sự có thể quan trọng nếu gọi GetFlagA đổi cái gì đó GetFlagB dựa trên (cấp này là thực tế đang thực sự xấu, nhưng đó là một chủ đề khác nhau cho một khác nhau thread.) Vấn đề ở đây là logic ngắn mạch, nếu GetFlagA chạy và trả về true, Get FlagB sẽ không bao giờ chạy, như đã thấy ở đây kết quả của GetFlagB là không quan trọng đối với việc đánh giá tuyên bố.
A | B | =
F | F | F
F | T | T
T | F | T đúng bất kể giá trị trả về của B.
T | T | T đúng bất kể giá trị trả về của B.
Tóm lại, hãy hỏi xem bạn có thể tối ưu hóa bằng cách sử dụng Demorgan hay bất kỳ thứ gì thực sự giống như phần còn lại của khoa học máy tính và kỹ nghệ phần mềm. "Nó phụ thuộc." nếu bạn đang sử dụng đánh giá phi chức năng, nó có thể được tối ưu hóa. Thành thật mà nói bạn đang nói một vài hoạt động trên một nền tảng điên rồ nhanh chóng, bạn nên tốt hơn chi tiêu thời gian của bạn bằng văn bản tài liệu.
Tôi hy vọng điều này sẽ hữu ích.
+1. Tôi thường xuyên tối ưu hóa các thử nghiệm boolean trong mã của tôi, đặc biệt cho khả năng đọc. – Cheeso
Trình biên dịch? Thông minh? – Kekoa
Trình biên dịch không thể tối ưu hóa logic của các biểu thức mà không gây ra việc đánh giá vào các thời điểm khác nhau. Xem câu trả lời của firoso. Nó có thể đủ thông minh để biết khi nào nó không đủ thông minh. – Kekoa