有趣的事情!以博尔值运作

Chr*_*eng 2 c++

以下是一个代码段

#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;
}
Run Code Online (Sandbox Code Playgroud)

结果是

print: fe
print: 1
print: 1
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是当bool由char设置时,是否会触发复制构造函数?但为什么不同?

CB *_*ley 8

A bool只能取值truefalse.

执行时,!(*pc)您将获得未定义的行为,因为您告诉编译器在实际上指向对象时!bool对象执行.(这是从投的空调风格到那些危险的,即使不确定的行为,当你申请的只发生运营商.)pccharchar*bool*!

当您将a charint(例如0xFF)转换为bool所有非零值时,将转换为true,将零值转换为false.