Tôi đã viết một chương trình liệt kê lỗi trong một tập hợp các công cụ và trả về giá trị boolean ở cuối (trả về true nghĩa là không tìm thấy lỗi).Bitwise AND với hàm trả về bool trong C++
Dưới đây là một bản tóm tắt của mã của tôi:
bool checkStuff1() {/*...*/}
bool checkStuff2() {/*...*/}
// ...
bool checkStuffN() {/*...*/}
bool checkAllStuff()
{
bool result = true;
result &= checkStuff1();
result &= checkStuff2();
// ...
result &= checkStuffN();
return result;
}
Tôi có niềm tin giá trị của result
sẽ là một trong những quyền ở cuối. Tuy nhiên, tôi muốn chắc chắn rằng tất cả các chức năng checkStuffX()
được gọi (vì chúng in thông báo lỗi khi thất bại, và tôi muốn tất cả các thông báo lỗi được in).
Tôi biết rằng nếu tôi đã viết theo cách này, nó sẽ bỏ qua tất cả checkStuffX()
sau khi người đầu tiên thất bại:
result = result && checkStuffX(); // Will not call checkStuffX() if result is already false
Tôi cũng biết rằng nếu tôi đã viết theo cách này, nó sẽ gọi tất cả checkStuffX()
chức năng:
result = checkStuffX() && result; // Will always call checkStuffX() even if result is false
Nhưng tôi đã tự hỏi liệu hành vi của mã tôi đang sử dụng, với so sánh bitwise, đã được xác định và đảm bảo theo tiêu chuẩn chưa?
Hoặc có rủi ro về hành vi không xác định, tùy thuộc vào trình biên dịch được sử dụng và tối ưu hóa của trình biên dịch không?
Bạn cũng có thể sử dụng 'bool failed = false; không thành công | =! checkStuff1(); không thành công | =! checkStuff2(); ... failed | =! checkStuffN(); return! failed; '. Điều này tuân theo quy tắc đơn giản của (A && B) =! (! A ||! B) –