0

私は次のプログラムを持っています

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 ポインターを使用することもできます。

4

2 に答える 2

0
int a = 216;
bool* v = (bool*)((void*)&a);
std::cout << (*v == true) << endl;

= 216 = 128+64+16+8 = 00000...11011000

*v = 1000 を出力すると true と表示されます...

しかし true=0001 で *v==true を満たさない

もちろん、私の実験後のちょっとした推測です...

その後、私はいつもsomething== trueの代わりにsomething!=falseを使用しています...

または something==false の代わりに something!=true...

于 2014-10-20T13:14:14.160 に答える