失败的三元运算符
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);
只是检查条件。
我有这个三元运算符,它总是 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);
只是检查条件。