失败的三元运算符

Failing ternary operator

我有这个三元运算符,它总是 returns 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;

我该如何解决这个问题?

非常感谢您的帮助。

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

表示

bool myOperator= 1;

因为 0 总是被视为 false。

C++中的三元运算符表示condition ? value when true : value when false.

因此,你应该这样写:

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

请注意,您应该使用 int(或其他整数类型,如 char)来存储整数。

你可以这样写

bool myOperator = !(waitingTime < awayPeriodThreshold);

bool myOperator = (waitingTime >= awayPeriodThreshold);

只是检查条件。