私は次のプログラムを持っています
int a = 216;
bool* v = (bool*)((void*)&a);
std::cout << (*v == true) << endl;
このプログラムは true または false を出力すると思いますが、代わりに 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;
または、たとえば 216 などのランダムな値を指す、初期化されていない bool ポインターを使用することもできます。