以下是一个代码段
#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设置时,是否会触发复制构造函数?但为什么不同?
A bool只能取值true和false.
执行时,!(*pc)您将获得未定义的行为,因为您告诉编译器在实际上指向对象时!对bool对象执行.(这是从投的空调风格到那些危险的,即使不确定的行为,当你申请的只发生运营商.)pccharchar*bool*!
当您将a char或int(例如0xFF)转换为bool所有非零值时,将转换为true,将零值转换为false.
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |