bool型編1件のフィードバックTweetTweetTweet小ネタ。プログラミングの合間にふと思ったちょっぴり邪悪なアイデアを実装してみました。C++のbool型変数で、そのままでも否定してもtrueになる変数を用意できるよ、というお話です。組み込み型に未定義の値を入れたらどうなるんだろうと思ってやってみました。ゆるC++プログラマーを混乱させることができます。良い子のみんなは真似しないように。おまけで書きますが、良い子のclangには効きませんでした。前置き編bool型変数というのは真か偽の2値のみをとる変数です。2値のみというのが当然大事な点で、いくら高度で現代的な言語でも「ちょっと間違い」とか「だいたい真」とかそういうものはbool型変数では表現されません。(そうでないとまともな論理演算もできなくなります。)C++においてもこれは当然なのですが、ところが内部ではbool型は大抵8bitの値(正確には処理系依存)で表現されるため、実際にはかなり冗長になっています。これはまあ身近な処理系が8bit=1Byteを1単位で扱っているため自然な表現ではあるのですが、そうすると2値以外の値も頑張れば実現可能ということになるわけです。ある環境ではtrueが00000001、falseが00000000で表現されていたとすると、無理矢理01010101とかいう値をbool型に代入できるわけです。C++を触る以上、気をつけないと未定義の世界というのはそこかしこにあるわけですが、この値はただの組み込み型でしかも一見普通に振る舞う(異常なままコピーまでできる)ためどことなく気を許してしまいます。実装&実験編こんなソースコードを書いて実行してみます。true両方のif文の中に入るという一見不可解な挙動の完成です。if文で丁寧に”=true”と書いているのには特に意味はありません。