我有以下真或假的程序C++相比,运营商没有返回
int a = 216;
bool* v = (bool*)((void*)&a);
std::cout << (*v == true) << endl;
我希望这个程序打印出真或假,而是它打印出216我与g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
编译它。预计会出现行为还是一些错误?为什么等号运算符会返回不同于bool的类型?
--------- ---------编辑
我的意图不是转换为void而是使V存储216在内存中的位置。替代方案可能是这样的:
bool v;
int a = 216;
memcpy(&v, &a, sizeof(bool));
std::cout << (v == true) << endl;
或者,我可以拿未初始化的布尔指针,它指向这恰好是例如一些随机值
'v'指向临时(由所有演员创建),在创建它的行的末尾无效。也许让'v'成为'bool'不是'bool *'。请记住,'v'将始终为真,这里指向有效的内存位置('a'的地址)。尝试'bool v =(&a);' – Niall 2014-10-20 12:04:14
[无法重现](http://ideone.com/aTWLm8)。我没有在'stdout'中看到'216'。 – CoryKramer 2014-10-20 12:05:27
@Cyber你看到'0'而不是预期的'1'虽然_Horray for UB!_ – Baldrickk 2014-10-20 12:21:33