почему значение следующего выражения ложно?
bool a = false;
bool b= true;
std::cout<< a || !b && !a || b;
и почему значение меняется при добавлении скобок
bool a = false;
bool b= true;
std::cout<< (a || !b && !a || b);
Не следует ли ставить круглые скобки так:
a || (!b && !a) || b
, и результат будет false
или же false
или же true
равный true
?
Как уже упоминалось в комментариях, в первом случае выражение связано с приоритет оператора оценивается как
(std::cout << a) || !b && !a || b;
Результат std::cout << a
это ссылка на std::cout
сам объект, который в C ++ 03 конвертируется в bool
через operator void*()
унаследованный от std::basic_ios
, В C ++ 11 есть operator bool()
вместо этого, что позволяет так называемый контекстное преобразование.
Остальное поэтому просто логическое выражение и его результат отбрасывается.
Других решений пока нет …