C++相談室 part166 (569レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
529(2): デフォルトの名無しさん (ワッチョイ 1f7f-Wka8) [sage] 2025/07/06(日) 10:53:22.37 ID:14zTNASB0(1) AAS
普通はoperator bool(または fail())を使う
531: デフォルトの名無しさん (ワッチョイ ffa1-BzvG) [sage] 2025/07/06(日) 11:00:55.07 ID:B20RUTJT0(5/9) AAS
>>528>Bが一回余分にループするのは気持ち悪いけど
いきなりis >> s してその直後のeof()を当てにするロジックである限り、
リンク先のケースBの挙動となり、最後の要素に引き続く空白文字がないとき
最後の要素が入力ストリームにあるのに受け取れないというもっと深刻な事態となる以下略
>>529
operator boolはis.good()と同じはず……
なおかつそれ単独では(is >> sのsがchar以外のとき)ケースBの解決になんね
536: デフォルトの名無しさん (ワッチョイ ffa1-BzvG) [sage] 2025/07/06(日) 12:43:07.86 ID:B20RUTJT0(8/9) AAS
>>529
ゴメ operator std::istream::bool() か std::istream::fail() だけでとりま解決したわスマンカッタorz
外部リンク:ideone.com
オンメモリのストリームである std::istringstream であっても>>533533(1): デフォルトの名無しさん (ワッチョイ ffa1-BzvG) [sage] 2025/07/06(日) 11:24:16.88 ID:B20RUTJT0(7/9) AAS
二転三転してすまんこ考えを改めたはサーセン……orz
入力ストリームはシリアルポートみたいな途中で入力がブチ切れる危険性があるブツである
こともあるから、
ケースB) (空白) (非空白文字列の期待する全体)
ケースB') (空白) (非空白文字列が受信タイムアウトにより途中で切れたもの)
の区別が!isになったというだけでは区別がつかない。一方、
(空白) (非空白文字列) (空白)
まで受け取ったら、(非空白文字列) がタイムアウトにより途中で切れたものでないことが確実となりワカル
故に、ケースBやB'みたいな条件を扱うこと自体がライブラリの仕様想定外なのかもしれん……
通常のテキスト読み込みでは行末に改行文字(空白文字のうち)が1文字以上あるから、この枠内で話が収まる。
Unixみたいに改行文字が '\n' 1文字だけな環境で、改行文字を読み飛ばして
呼び出し元に返さないgetline()みたいなやつで読んだ結果を
istringstreamしようとするとケースBが顕在化するが、
この場合は強制的に末尾に空白文字を付けることができうる
そうすればケースBは発生しない(ただし空白文字を付け忘れるとバグ
のケースB'に当たるケース
(オンメモリなので非空白文字列でデータが終わっている場合)においてbadbitがセットされるっぽい
この挙動がおま環でないかどうかはわからん……
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.034s