首页 > 解决方案 > 失败的三元运算符

问题描述

我有这个总是返回 true 的三元运算符:

int waitingTime = 0;
int awayPeriodThreshold = 5;

bool myOperator= 0? (waitingTime < awayPeriodThreshold) : 1;

我在 GoogleTest EXPECT_EQ 中使用它来比较两个布尔值。

我有一个测量时间的程序,当时间未达到给定阈值(在本例中为 5 秒)时输出为 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 的开始时 awayPeriodThreshold 为 5;

我怎样才能解决这个问题?

非常感谢您的帮助。

标签: c++googletestconditional-operator

解决方案


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);

只是检查条件。


推荐阅读