我有以下真或假的程序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