У меня есть этот тернарный оператор, который всегда возвращает true:
int waitingTime = 0;
int awayPeriodThreshold = 5;
bool myOperator= 0? (waitingTime < awayPeriodThreshold) : 1;
Я использую его в GoogleTest EXPECT_EQ для сравнения двух логических значений.
У меня есть программа, которая измеряет время, вывод равен 0, когда время не достигает заданного порога (в данном случае 5 секунд), и 1, когда оно больше или равно пяти секундам. Это работает правильно, но когда я пытаюсь использовать это:
//at the beginning
bool isHigherThanTimeThreshold = 0
EXPECT_EQ(isHigherThanTimeThreshold, myOperator) //Test fails
// after lets say 10 seconds, isLowerThanTimeThreshold changes to 1
EXPECT_EQ(isHigherThanTimeThreshold, myOperator) //Test passes
это всегда терпит неудачу, потому что myOperator всегда истинен, даже в начале, когда время ожидания равно 0, aawayPeriodThreshold равен 5;
Как я могу это исправить?
Большое спасибо за Вашу помощь.
bool myOperator= 0? (waitingTime < awayPeriodThreshold) : 1;
означает
bool myOperator= 1;
потому что 0
всегда считается ложным.
Тернарный оператор в C++ означает condition ? value when true : value when false
.
Следовательно, вы должны написать так:
int myOperator= (waitingTime < awayPeriodThreshold) ? 0 : 1;
Обратите внимание, что вы должны использовать int
(или другие целочисленные типы, такие как char
) для хранения целых чисел.
Вы можете написать как
bool myOperator = !(waitingTime < awayPeriodThreshold);
или
bool myOperator = (waitingTime >= awayPeriodThreshold);
просто проверить состояние.
Большое спасибо, я перепроектировал это и не понимал, что это может быть так просто. Срок для принятия ответа еще не истек, но я скоро приму ваш ответ, еще раз спасибо.
@Mechatrnk Извините, bool myOperator = (waitingTime < awayPeriodThreshold);
в моем предыдущем ответе даст результат, противоположный указанному в вопросе. Зафиксированный.
Последнее можно записать без (лишних скобок).
Похоже, вы получили представление о тернарном операторе от Python? Если это правда, я предлагаю вам забыть все, что вы узнали из Python, и изучать C++, как если бы это был ваш первый язык. Это будет намного проще, чем пытаться провести параллели между этими двумя языками.