gpt4 book ai didi

c++ - 有趣的事情! bool 值运算

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:07 25 4
gpt4 key购买 nike

以下是一段代码

#define T 0xFF
using namespace std;
int main(void) {
char c = T;
bool *pc = (bool *)(&c);
bool nc = !(*pc);
cout << "print: " << hex << nc << endl;

nc = T;
cout << "print: " << hex << nc << endl;

nc = c;
cout << "print: " << hex << nc << endl;
}

结果是

print: fe
print: 1
print: 1

如果使用值 0xFF 将 char 类型转换为 bool,则 bool 值为 1。

但是当将 char 指针类型转换为 bool 指针时,0xFF 变为 0xFE,只有最后一位被 !操作。

似乎 gcc 假定 bool 为 0 或 1,如果不调用 bool 对象的构造函数,它只会将内存解释为包含 bool 并翻转最低有效位。

但是当 bool 被 char 设置时,它会触发复制构造函数吗?但为什么不一样呢?

最佳答案

bool 只能取值 truefalse

当您执行 !(*pc) 时,您会得到未定义的行为,因为您告诉编译器在 上执行 ! bool 对象,而实际上 pc 指向一个 char 对象。 (这是从 char* 转换为 bool* 的 C 风格是危险的,即使 未定义的行为 仅在您应用 ! 运算符。)

当您将 charint(例如 0xFF)转换为全非零的 bool 时值转换为 true,零值转换为 false。

关于c++ - 有趣的事情! bool 值运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5088414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com