为什么sizeof(!0)打印1而不是4?

时间:2018-10-06 06:30:14

标签: c++ c++11 sizeof

#include <iostream>

int main()
{
    std::cout<<sizeof(0);
    return 0;
}

在这里,sizeof(0)在C ++中是4,因为0是整数rvalue。

但是,如果我这样写:

std::cout<<sizeof(!0);

此处,sizeof(!0)1。但是,!0表示它打印1,它也是int类型。

然后,为什么sizeof(!0)打印1而不是4?我在这里想念什么?

4 个答案:

答案 0 :(得分:17)

logical negation运算符:

! rhs
  

如果操作数不是bool,则使用上下文转换为bool来将其转换为bool :只有在声明bool t(arg)格式正确的情况下,格式才正确。临时t。

     

结果是布尔值。

在您的实现中,sizeof (bool) (定义为实现)为1。

答案 1 :(得分:7)

!0bool

sizeof(bool)取决于实现方式。

答案 2 :(得分:3)

通过在整数值前加上!,可以将其转换为布尔值-可以使用单个字节表示。

答案 3 :(得分:1)

当我们写0时,它是一个整数,但是当我们写!0时,它隐式地将整数转换为布尔值。 !运算符可将任何整数转换为布尔值,您可以通过编写!1!2来尝试。...所有这些都给出1个字节的大小。 如果您想将!0的大小作为整数,则可以将其键入为

sizeof(int(!0));