【发布时间】:2019-03-02 12:50:14
【问题描述】:
使用!!x 和(bool)x 有什么区别吗?
假设__STDC_VERSION__ >= 199901L 和#include <stdbool.h>
他们是否都保证结果是0 或1,并且无论x 的大小和值如何,都不会发生溢出?
【问题讨论】:
-
(bool)x是 bool 的真实状态(如果 x 不为零),但这与1不完全相同 -
bool 有两种状态,您可以随意称呼它们,但我希望清楚我所说的“真实状态”指的是哪一种。该标准没有给出各州的官方名称
-
表达式
while(x) /*...*/;、while(!!x) /*...*/;和while((_Bool)x) /*...*/;是等价的。我更喜欢第一个。if和for的 condition 部分相同。 -
更多的是当您出于某种原因实际需要号码
1时。 -
(bool)2 == 1为真,因为整数提升将(bool)2带到(int)1