TL; DR: Нет, на самом деле нет никакого способа написать ваше «сложное» условие.
Общий синтаксис логического оператора или оператора: <expression> || <expression>
.
При sf::Keyboard::Up||Down
левая сторона действительно является выражением, а правая - нет.Это просто символ, который, вероятно, даже не объявлен и поэтому не будет компилироваться.
Результатом логического оператора или оператора является значение bool
, либо true
, либо false
,Значение true
может быть неявно преобразовано в 1
и false
в 0
.В обратном направлении все ненулевые значения неявно преобразуются в true
, в то время как только 0
преобразуется в false
.
Если мы берем все выражение sf::Keyboard::Up||Down||Left||Right
и предполагаем, что символы будутбыть действительным без какой-либо области видимости, это выражение равно ((sf::Keyboard::Up||Down)||Left)||Right
.
Теперь, как оценивать это выражение, зависит от значений этих символов.Но если мы предположим, что только один может быть равен нулю, у нас будет
sf::Keyboard::Up||Down
, что будет true
true||Left
, что будетбыть true
true||Right
, что будет true
.
Так что ваше состояние
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up||Down||Left||Right))
действительно будет
if(sf::Keyboard::isKeyPressed(true))
, что равно
if(sf::Keyboard::isKeyPressed(1))
, которое при использовании перечисления Key
будет равно
if(sf::Keyboard::isKeyPressed(sf::Keyboard::B))