c++ - 失败的三元运算符
问题描述
我有这个总是返回 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
总是被视为假的。
C++ 中的三元运算符表示condition ? value when true : value when false
.
因此,你应该这样写:
int myOperator= (waitingTime < awayPeriodThreshold) ? 0 : 1;
请注意,您应该使用int
(或其他整数类型,如char
)来存储整数。
你可以这样写
bool myOperator = !(waitingTime < awayPeriodThreshold);
或者
bool myOperator = (waitingTime >= awayPeriodThreshold);
只是检查条件。
推荐阅读
- python - Django DateTime 减法小时数
- java - 没有 exec-maven-plugin 的 exec.mainClass 如何工作?
- json - 用 jq 在 json 中增加一个数值
- javascript - 如果我的不和谐机器人对发送的每条消息都有反应,我怎么能让我的不和谐机器人只对 png、jpg 和 gif 做出反应
- sql - 具有不相等相关谓词的不支持的聚合子查询
- ios - Xcode 12 beta 6 中缺少 availableRawPhotoPixelFormatTypes
- python - 从 Numpy.datetime64 数组中获取单个日期时间特征(例如日、小时、年)
- docker - 强制 docker for Windows 使用 Hyper-V 而不是 WSL2
- r - R中同一图上的两个直方图
- mysql - Mysql计算相同的值并按最大值分组