非推奨だった bool 型に対するインクリメント演算子を削除 - cpprefjp C++日本語リファレンス

概要 C++17では bool 型に対する前置および後置の operator ++ を削除する。 bool 型に対する前置および後置の operator ++ とはC++98の時点で非推奨になっていた機能である。 具体的にどのような働きをするのかというと、以下のように値を true に書き換える機能をもつ。

記事へジャンプ

みんなの反応

はてなブックマークでの反応
1kz78@hatena 2017/07/17 20:54:39
"これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。"
2FTTH@hatena 2017/07/17 22:03:41
だいぶ変態的な用途だし普通困らんでしょ
3mojimojikun@hatena 2017/07/17 22:07:53
「これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。」
4ytack@hatena 2017/07/17 23:06:41
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
5nunux@hatena 2017/07/17 23:08:04
人が死ぬバグ プログラミング
6stealthinu@hatena 2017/07/17 23:28:04
『これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし3人が死亡した例がある』『条件変数を非0にする(=trueにする)ために、インクリメントを使っていた』うげー/この件はアセンブラとのこと
7gfx@hatena 2017/07/17 23:39:38
C++17で削除されるらしい。
8uzusayuu@hatena 2017/07/17 23:52:34
技巧的なプログラミングって、益より害の方が大きそうな気がする
9mohno@hatena 2017/07/18 01:20:14
「これが1になるまでif文の中の式は実行されない」←いや待て、0以外なら負の値でも実行される。だいたい「最初だけ」を判別するのに8ビット整数使うとか、普通のバグ。最後のif文は「if(flag)std:cout << ',';flag=1;」でOK。
10samu_i@hatena 2017/07/18 02:21:12
“十分な出典が存在せず推測でしかない”
11turanukimaru@hatena 2017/07/18 02:39:57
これは「後置」のoperator ++というところが重要と言うかつい使ってしまうというか、何かをしてからフラグを立てたいときってまああるけど危ないからやめようねと。繰り返し++使わないならまだありではあるのだが。
12oktnzm@hatena 2017/07/18 03:09:01
一行けちるために分かりにくいコードを書いてはいけない。
13fellfield@hatena 2017/07/18 04:04:12
『これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある』……これのことか https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%A9%E3%83%83%E3%82%AF25
14sisya@hatena 2017/07/18 05:15:13
「これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。」C++の歴史を読んでいたはずが、剛速球に直撃してしまったかのような気持ちになった。
15daruyanagi@hatena 2017/07/18 05:49:24
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある”
16naoya2k@hatena 2017/07/18 07:01:51
「条件変数を非0にする(=trueにする)ために、インクリメントを使っていた」印象に残るバグがまたひとつ増えた
17isseium@hatena 2017/07/18 07:11:16
非ゼロにすればtrueだよね!よしインクリメント! って発想よくわからないけど、大昔だしマシンリソースのこと考えてプログラムの行数と消費するCPUクロック数を節約しようとしたのかなぁ
18Rion778@hatena 2017/07/18 07:23:46
>これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。
19tydk27@hatena 2017/07/18 07:47:32
C++を憎んでいる人というのは、このバグによって殺された被害者の親族だったのだろう。それならば納得だ。
20raitu@hatena 2017/07/18 07:49:29
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある”
21arisane@hatena 2017/07/18 07:59:04
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
22mtane0412@hatena 2017/07/18 08:08:38
バグで人は死ぬ
23yorkfield@hatena 2017/07/18 08:22:22
「2の補数表現を使っているため、int型の最小値になる。すると、これが1になるまでif文の中の式は実行されない。」 / 負の値なら実行されるでしょ。しかし、真偽値に++とかそもそもやっちゃ駄目なコードだろうな。
24irodori_kotori@hatena 2017/07/18 08:23:27
C++はやってないからbooleanにインクリメントが使えるのに驚いた。でもCやってた時でも真偽の切り替えにインクリメントは使ったことなかった。/Rubyの場合、0が真なのが最初気持ち悪かった。(どうでもいい話)
25uturi@hatena 2017/07/18 08:26:39
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。” フムフムと読んでいたら怖い表現が唐突に出てきて驚いた。 毎回trueとfalseが入れ替わるわけじゃなかったのね。
26progrhyme@hatena 2017/07/18 08:37:22
"これに起因するバグで6つの放射線被曝事故を起こし、3人が死亡した例がある"
27carrier_pigeon@hatena 2017/07/18 08:38:47
c++17という表記もあと81年でc++98にぶつかるバグを内包しているな。
28masudamaster@hatena 2017/07/18 08:46:16
『これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。』
29mkusunok@hatena 2017/07/18 09:04:06
言語に歴史あり
30tsutsumi154@hatena 2017/07/18 09:36:52
インクリメントとはいったい
31teracy_junk@hatena 2017/07/18 09:43:55
『これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある』
32Cujo@hatena 2017/07/18 09:46:30
『Therac-25』の日本語版WPだと「少なくとも5人の患者を死亡させた」になってるな。。。。。。(WP: https://goo.gl/BfDXfe)/「失敗知識データベース:A-III型のソフトウエアの欠陥による放射線治療機事故」https://goo.gl/aOSLl(←怖
33yusuket@hatena 2017/07/18 09:49:06
バグで人が死ぬ事例
34technerd@hatena 2017/07/18 09:51:04
Therac-25のIIIは、他のアカンバグも沢山もってて、このコードはその原因の一つだったわけか
35FutureIsWhatWeAre@hatena 2017/07/18 09:55:20
死者が出てから規格が変わるまで30年もかかるわけか
36sawat@hatena 2017/07/18 09:56:24
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
37luccafort@hatena 2017/07/18 10:06:29
何故こんな仕様が盛り込まれているのか?と思ったらきちんと(推測ではあるものの)その経緯が書かれてなるほど、それなら確かに…ってなった。それが今にまで継承されてしまっていたのが恐怖以外のなにものでもない。
38kujoo@hatena 2017/07/18 10:07:46
"こうした事故を防ぐためなのかは不明だが、C++のbool型はインクリメントした際、常にtrueになるように定められていた。"
39xjack@hatena 2017/07/18 11:36:53
一文で副作用が複数回起こるコードはクソ,代入やインクリメントの結果を使うコードも読みにくいからクソ.例であがってるコードは2行に分ければいいんじゃない.
40K2ICE@hatena 2017/07/18 11:56:28
"これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。"
41kastro-iyan@hatena 2017/07/18 12:33:02
普通は使わんよなぁ
42Lhankor_Mhy@hatena 2017/07/18 12:41:30
これ、動的型付けでインクリメント演算子がある言語なら普通に書けちゃうテクニックだな……/ javascriptで動かしてみたら、なんかおかしい結果になった。
43Surume@hatena 2017/07/18 12:45:26
三人死亡って…
44hevohevo@hatena 2017/07/18 12:48:11
歴史的には、int型をbool型として使っており、flag++でtrue(非ゼロ)にする記述がまかり通っていたと。でも整数型flagがオーバーフローしたときにインクリメントするとfalse(ゼロ)になる。それで大事故まで・・・ヒェッ
45OkadaHiroshi@hatena 2017/07/18 12:58:50
C++ はともかく、C言語に bool(_Bool) 型を追加したのは間違いだったと思う。
46cho45@hatena 2017/07/18 13:20:03
人が死なないと設計ミスは直らない
47xbs2r@hatena 2017/07/18 13:32:36
バグで人が死ぬのは別に珍しくない。それより非推奨のまま20年維持されていたことが気になる
48hide-K@hatena 2017/07/18 13:37:59
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
49tumo300-500@hatena 2017/07/18 13:44:39
うひょー
50delphinus35@hatena 2017/07/18 13:51:01
なんだこの記法。使ってるやついるのか、と思って最後まで読んでビックリした。クソコードでユーザーが実際に死ぬとは……。
51Chishow@hatena 2017/07/18 14:19:16
C++はなんかできてた機能を削ることに臆病な印象があるな
52dynamicsoar@hatena 2017/07/18 14:36:53
リンク先のen.wpなどにも書いてあるけど、Therac-25はflagをincrementしていたというバグはあったけれど、言語としてはCではなくアセンブリ言語で書かれていた模様。
53tail_y@hatena 2017/07/18 15:28:35
“非推奨だった bool 型に対するインクリメント演算子を削除(C++17)”
54ystt@hatena 2017/07/18 17:56:57
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。” !?!?
55shoma@hatena 2017/07/18 18:55:07
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
56Nyoho@hatena 2017/07/18 20:34:25
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。” 全く知らなかった……
57UDONCHAN@hatena 2017/07/18 22:18:32
コレ死ぬやつ
58W53SA@hatena 2017/07/19 01:47:52
歴史的経緯による負債はちゃんとどこかでパージしないといけないのだなぁ
59taqpan@hatena 2017/07/19 11:02:08
Cの不自由さをC++が中途半端にサポートしてたけど止めたという話。人を死なせたのはboolの仕様は関係なく8ビット整数値のオーバーフローを考えていないクソコード。
60richard_raw@hatena 2017/07/19 11:12:34
「これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。」ワァオ。
61Fivestar@hatena 2017/07/19 17:58:39
恐ろしや
62t-wada@hatena 2017/07/24 09:56:40
"これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある"
63hazy-moon@hatena 2017/07/24 10:05:20
"これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。"
64soh3914@hatena 2017/07/24 10:54:55
“6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
65honeybe@hatena 2017/07/24 12:04:59
「これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある」
66rryu@hatena 2017/07/24 21:31:15
C++の仕様に入れてしまうくらいフラグをインクリメントするコードが多かったということなのだろうか……
67zyzy@hatena 2017/07/24 22:26:00
馬鹿みたいな仕様でも、人が死んだ前科ある挙動への対処となると、まぁ変えにくかったろうな、とは思うがしかし……
68kasei_san@hatena 2017/08/02 10:51:48
“これに起因するバグで少なくとも6つの過度の放射線被曝事故を引き起こし、3人が死亡した例がある。”
コメント内容の著作権は、投稿者に帰属します。
削除依頼、不適切コメントのご連絡はこちらにお願いいたします。
2017-07-17 12:51:01:1500263461:1511049426
comments powered by Disqus
※メールアドレスは公開されません。
人気の反応