奇怪的问题,但是有人向我展示了这一点,我想知道你能否不使用! C ++中INT的操作员? (对我来说这很奇怪)。

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
有帮助吗?

解决方案

是的。对于整体类型, ! 返回 true 如果操作数为零,并且 false 除此以外。

所以 !b 这只是意味着 b == 0.


这是一个特殊情况,值转换为 bool. 。这 !b 可以看作 !((bool)b) 所以问题是什么是什么 b. 。在C ++中,算术类型,指针类型和枚举可以转换为 bool. 。当值为0或null时,结果为 false, ,否则是 true (C ++§4.1.2)。

当然,自定义课程甚至可以超载 operator! 或者 operator<类型可以转换为布尔>允许 !b 为他们的课。例如, std::stream 已经超载了 operator!operator void* 用于检查失败的问题,以便成语

while (std::cin >> x) {   // <-- conversion to bool needed here
  ...

可以使用。

(但是您的代码 !( a > b && b <= c) || a > c && !b 只是神秘的。)

其他提示

最初,在C中(C ++基于)没有布尔类型。取而代之的是,将值“ true”分配给任何非零值,并且将值“ false”分配给了评估为零的任何内容。这种行为仍然存在于C ++中。所以 int x, ,表达式 !x 方法 ”x 不正确”,那是”x 不是非零”,即是真的 x 为零。

你可以, !b 等同于 (b == 0).

对于非零值,INT的测试是正确的,对于零值是false的,因此对于零值,对于非零值而言不仅为false。

建筑 ! 操作员将其论点转换为 bool. 。标准指定 存在任何算术类型的转换(int, char,.... float, double...)布尔. 。如果源值为0,则结果是 true, ,否则是 false

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top