#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
?我在这里想念什么?
答案 0 :(得分:17)
logical negation运算符:
! rhs
如果操作数不是bool,则使用上下文转换为bool来将其转换为bool :只有在声明bool t(arg)格式正确的情况下,格式才正确。临时t。
结果是布尔值。
在您的实现中,sizeof (bool)
(定义为实现)为1。
答案 1 :(得分:7)
!0
是bool
。
sizeof(bool)
取决于实现方式。
答案 2 :(得分:3)
通过在整数值前加上!
,可以将其转换为布尔值-可以使用单个字节表示。
答案 3 :(得分:1)
当我们写0
时,它是一个整数,但是当我们写!0
时,它隐式地将整数转换为布尔值。
!
运算符可将任何整数转换为布尔值,您可以通过编写!1
,!2
来尝试。...所有这些都给出1
个字节的大小。
如果您想将!0
的大小作为整数,则可以将其键入为
sizeof(int(!0));