2009年10月7日水曜日

c++ではtrueは1

boolをfloatに暗黙の型変換?
http://sumishiro.blogspot.com/2009/08/boolfloat.html


 以前こんなことを書いたが考えてみれば、bool -> int -> floatで変換されたと思えばどうということはないな。クラスでこんな一足飛びな型変換ができちゃうのかなと少し試してみたが、再現できなかった。一足飛びな型変換は出来ないのかもしれない。

 また


C++言語仕様では、boolはintに変換でき、false→0/true→1 となっています。

--- ISO/IEC FDIS 14882:1998(E) ---

4.5 - Integral promotions [conv.prom]
...
-4- An rvalue of type bool can be converted to an rvalue of type int,
with false becoming zero and true becoming one.


true/falseは、1/0と保障されている?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040024.txt
より引用。
 とあり、trueはc++では1らしい。


#include <cstdio>
#include <cstring>
int main()
{
bool b;
std::memset( &b, 2, sizeof(b) );
if ( b == true ) std::printf("b == true\n");
if ( b == 2 ) std::printf("b == 2\n");
return 0;
}


output:

b == true
b == 2

0 件のコメント: