Неудачный тернарный оператор

У меня есть этот тернарный оператор, который всегда возвращает 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;

Как я могу это исправить?

Большое спасибо за Вашу помощь.

Похоже, вы получили представление о тернарном операторе от Python? Если это правда, я предлагаю вам забыть все, что вы узнали из Python, и изучать C++, как если бы это был ваш первый язык. Это будет намного проще, чем пытаться провести параллели между этими двумя языками.

Yksisarvinen 11.12.2020 13:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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 11.12.2020 14:04

@Mechatrnk Извините, bool myOperator = (waitingTime < awayPeriodThreshold); в моем предыдущем ответе даст результат, противоположный указанному в вопросе. Зафиксированный.

MikeCAT 11.12.2020 14:09

Последнее можно записать без (лишних скобок).

Pete Becker 11.12.2020 15:21

Другие вопросы по теме