Napisałem program, który zawiera listę błędów w zestawie danych i zwraca wartość logiczną na końcu (zwracanie wartości true oznacza, że nie znaleziono żadnego błędu).Bitowe ORAZ z funkcją zwracającą bool w C++
Oto podsumowanie mojego kodu:
bool checkStuff1() {/*...*/}
bool checkStuff2() {/*...*/}
// ...
bool checkStuffN() {/*...*/}
bool checkAllStuff()
{
bool result = true;
result &= checkStuff1();
result &= checkStuff2();
// ...
result &= checkStuffN();
return result;
}
mam zaufanie wartość result
będzie w sam raz na koniec. Chciałbym jednak mieć pewność, że wszystkie funkcje są wywoływane (ponieważ wyświetlają komunikaty o błędach w przypadku błędu i chciałbym, aby wszystkie komunikaty o błędach zostały wydrukowane).
wiem, że gdybym napisał ten sposób, byłoby pominąć wszystkie checkStuffX()
po pierwszym upadającego:
result = result && checkStuffX(); // Will not call checkStuffX() if result is already false
Wiem też, że gdybym napisał w ten sposób, będzie to nazwać wszystkie checkStuffX()
funkcje:
result = checkStuffX() && result; // Will always call checkStuffX() even if result is false
Ale zastanawiałem się, czy zachowanie kodu, którego używam, z porównaniem bitowym, zostało określone i zagwarantowane przez standard?
Czy istnieje ryzyko niezdefiniowanego zachowania, w zależności od używanego kompilatora i jego optymalizacji?
Możesz także użyć 'bool failed = false; failed | =! checkStuff1(); failed | =! checkStuff2(); ... failed | =! checkStuffN(); return! failed; '. Jest to zgodne z prostą zasadą (A && B) =! (! A ||! B) –