下面是一个代码段有趣的事情!在布尔值操作
#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,布尔值是1
但是,当输入一个char指针指向一个bool指针时,0xFF变成0xFE,只有最后一位被翻转了!操作。
似乎gcc认为bool是0或1,如果bool对象的构造函数没有被调用,它只会将内存解释为包含一个bool并将最低有效位翻转。
但是当bool被char设置时,它是否会触发复制构造器?但为什么不同?
@Charles感谢您修复凌乱的代码输出。 – 2011-02-23 08:16:56