C++中的右移bool

right shift bool in C++

在给定的代码中,布尔值已传递给 foo,如 mainFunc 所示。我不确定 e >> 24foo 中是否正确。我相信这只会给出垃圾值。

void foo(bool e){
   int a;
   bool s;
   e = e >> 24;
   ...
}

void mainFunc(){
   int *arg = (int*)malloc(sizeof(int));
   *arg = xxxx;   

   foo(*(bool*)arg);
}

这样做正确吗?

编辑:我更关心操作 e >> 24,因为 e 是布尔值。这不会导致任何问题吗?对任何误解表示歉意。

转换为 bool 只是创建一个新的布尔值传递给 fooarg 指向的四个字节中的任何一个都没有发生任何变化。它们完全相同。

I was more concerned about operation e >> 24, since e is bool. won't this lead to any issue?

内置算术运算符不对小于 int 的类型进行运算,有关详细信息,请参阅 integral promotion。在表达式 e = e >> 24; e 中是 bool 并且要将其右移,编译器首先将 e 的值提升为 int,进行移位然后转换结果回到 bool。结果总是 int 0,它被转换为 bool false。除非 sizeof(int) <= 3,在这种情况下将其移动 24 位或更多位是未定义的行为。