1. ホーム
  2. c++

[解決済み] ブール→イント変換

2022-04-26 11:19:52

質問

この変換はどの程度ポータブルですか?両方のアサーションがパスすることを確認できますか?

int x = 4<5;
assert(x==1);

x = 4>5;
assert(x==0);

理由は聞かないでください。醜いのは分かっています。ありがとうございます。

解決方法は?

int x = 4<5;

完全なポータブル。標準に準拠しています。 bool から int 変換は暗黙のうちに行われます。

C++ 11 または 14 標準の §4.7/4, C++ 17 標準の §7.8/4, 20 標準の §7.3.9/2 によると (Integral 変換 )

ソースの型がboolの場合、値 false はゼロに変換されます と 値 true は1つに変換されます .


Cについては、私の知る限りでは bool は、C言語では(1999年以前)だから bool から int の変換は、C++のみで有効です。Cでは 4<5 は次のように評価されます。 int の値で、この場合、値は 1 , 4>5 は次のように評価されます。 0 .

EDIT: Jensのコメントで、C99には _Bool 型に変換します。 bool で定義されるマクロです。 stdbool.h ヘッダーファイルの truefalse にもマクロが定義されています。 stdbool.h .

C99の§7.16に書いてある。

マクロ bool は_Boolに展開されます。

[..] true に展開され、整数の定数 1 , false に展開され、整数の定数 0 ,[..]