C++17で非推奨だったbool型へのインクリメント演算子、利用不可能に

2017年7月20日 20:04

印刷

記事提供元:スラド

 C++言語の新標準規格である「C++17」では、bool型に対する++演算子が利用できなくなるそうだ(cpprefjp - C++日本語リファレンス)。今まではbool型の変数に対し++演算子を適用すると、その変数の値をtrueにするという仕様となっていた。

 なお、C言語にはbool型が存在しないため、int型をbool型の代用として使用することが良くあった。この場合、C++の仕様と同様に++演算子を適用するとその値は必ず1以上、つまりtrueになるように見える。しかし、変数の値がint型に格納できる最大値(たとばintが8ビットの場合255)になっていた場合、++演算子を適用するとオーバーフローが発生してその値は0、つまりfalseになってしまうという問題があった。

 cpprefjp - C++日本語リファレンスによると、放射線療法機器「セラック25」ではこのバグが原因で死者を出す事故が発生していたという。

 スラドのコメントを読む | デベロッパーセクション | プログラミング | デベロッパー

 関連ストーリー:
C言語は滅びるべきか 2017年07月20日
前置インクリメント(++x) よりも後置インクリメント(x++) のほうが高速? 2015年04月19日
iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた 2014年02月24日

※この記事はスラドから提供を受けて配信しています。

関連記事