C++講座 その2 論理型 bool型
論理型(bool, boolean型)はtrue(真)かfalse(偽)を表現する。
例えばC言語では、
if ( 3 ) { /* 必ずこっちの処理が行われる */ } else { /* */ }
のように、0以外が真で0が偽となっていた。if文の結果が真の場合、if文ブロックの処理が行われ、偽の場合elseのブロックが処理される。
C++では、真偽値を明示するためにbool型が追加されている。
if ( true ) { /* 必ずこっちの処理が行われる */ } else { /* */ }
例えば無限ループも次のように表現できる。
/* Cの場合 */ while(1) { }
// C++の場合 while(true) { }
といっても、C++はCと互換性があるので、最初のif(3)という書き方もそのまま使える。但し、可読性を考えるなら積極的にtrue, falseを利用するべき。
小休止
cut & loopと言うiOS向けの語学用オーディオプレイヤーを作成しています。 TOEICなどの語学教材のMP3やCD音源をご利用の際にぜひ試してみてください。
「cut & loop 語学用オーディオプレイヤー」をApp Storeで
C言語とWindowsでのBOOL型 そしてその注意事項
ちなみにC言語でも真偽値を明示するために、
typedef enum tagBoolean{FALSE, TRUE}Bool;
とすると、Bool型を定義できる。
Visual C++などを利用している場合、BOOL型という型をみかけることがある。 これは記憶が正しければ
typedef UINT BOOL; #define FALSE (0) #define TRUE (1)
の様に定義されている。Windows APIはC言語での利用も前提としているため、(恐らく)C++型のbool型ではなく、独自定義のBOOL型を利用している。
注意点としては、BOOL型はUINTの別名でしかないため、例えば次の様な書き方ができてしまう。
BOOL foo() { return 3; } void bar() { if( foo() == TRUE ) { /* この処理は通らない */ } }
このため、BOOL型を比較する場合はFALSEで比較するか、TRUE / FALSEを明示しないこと。
void bar() { if( foo() != FALSE ) { /* こっちを通る */ } } void bar() { if( foo() ) { /* こっちを通る */ } }
bool型の値
bool型をintに代入すると次のように変換される。
int a = true; => 1 int b = false; => 0 int c = 3; bool d = (bool)c; => true int e = (int)d; => 1;
JavaやC#でのbool,boolean
JavaやC#ではifやwhileなどの式の結果は論理型と規定されている。
if( 3 ) { // コンパイルエラー } if( true ) { // OK }
と、論理型を指定する必要がある。
3 == 1; => 0 3 == 3; => 1
と比較演算の結果が0, 1で返っていたのに対して、Java/C#では
3==1; => false 3==3; => true
と比較演算の結果は、論理型で返される。