C++相談室 part166 (569レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
102
(1): デフォルトの名無しさん (ササクッテロラ Sp03-5jAo) [sage] 2025/05/18(日) 11:50:52.70 ID:a10wYOdRp(1) AAS
>>89
89(5): デフォルトの名無しさん (ワッチョイ 2308-s4bX) [] 2025/05/17(土) 00:38:48.40 ID:+G5mL4qu0(1) AAS
C++でラムダ式をコンストラクタで受け取るにはどうすればいいの?
std::function使ってもエラーでる
見事に「ちゃんと問題の出るコード書いてくれんとわからん」ケースだったな

>>97-98
関係無い
142
(1): デフォルトの名無しさん (ワッチョイ 9f02-Uyjp) [sage] 2025/05/26(月) 11:39:55.70 ID:TOgUzGTP0(9/12) AAS
>>141
141(1): デフォルトの名無しさん (ワッチョイ 4f93-UPeL) [sage] 2025/05/26(月) 11:38:22.78 ID:Qe1aHUzC0(2/3) AAS
>>140
まずは質問の内容を明確化するのが先じゃないんかね。

threadオブジェクトをキューするのかinvokerオブジェクトをキューするのか聞かれているんだから、まずはどちらのなのか答えたら?

答える気が無いなら、自力でC++日本語リファレンスのthreadあたりを調べればいいんじゃない?知らんけど。
またゴミレスかよ
消えろ

バカが…
145
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bb32-VkiR) [sage] 2025/05/26(月) 11:48:59.70 ID:uEE7hcCQ0(4/4) AAS
質問に答えてほしくないみたいなのでとりあえずこいつに触れるのはやめるね。
244: デフォルトの名無しさん (ワッチョイ 2b5b-HFYW) [sage] 2025/06/11(水) 00:26:46.70 ID:BmOhOZog0(1) AAS
面白いからやってるだけでは?
326: デフォルトの名無しさん (ワッチョイ b1d6-xkro) [sage] 2025/06/17(火) 12:43:21.70 ID:4NySVCEQ0(2/2) AAS
>>322,324,325
322(1): デフォルトの名無しさん (ワッチョイ 8101-1tcn) [sage] 2025/06/17(火) 11:27:27.12 ID:2aAnRxo/0(1) AAS
>>321
ifs.close()前にifs.fail()は真を返す

#include <iostream>
#include <fstream>
int main() {
constexpr auto path = "tmp.txt";//なんでもいいです
std::ifstream ifs(path);
if(ifs.fail()){
std::cerr << "File open error: " << path << std::endl;
return -1;
}
std::string buf;
std::cout << "0: " << ifs.fail() << '\n';
while(std::getline(ifs, buf))
std::cout << buf << std::endl;
std::cout << "1: " << ifs.fail() << '\n';
ifs.close(); //←これ
std::cout << "2: " << ifs.fail() << '\n';
if(ifs.fail()){
std::cerr << "File close error: " << path << std::endl;
return -1;
}
return 0;
}
324(1): デフォルトの名無しさん (ワッチョイ 5e0b-AFj/) [sage] 2025/06/17(火) 11:45:37.82 ID:TpERKz9s0(1) AAS
>>321
close()したからではなくwhile(std::getline(ifs, buf))でeofになるまで読んだからfailになってる
325(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f532-iKku) [sage] 2025/06/17(火) 12:02:37.80 ID:nCRyYLZZ0(3/3) AAS
>>321
実際に入出力するための機能はストリームバッファと呼ばれるオブジェクトが担当していて、ストリームがストリームバッファを所有する構造になっている。
ストリームが close するとストリームバッファの close が呼ばれて、それが nullptr を返した場合 (クローズに失敗した場合) に setstate(failbit) が呼ばれる。
外部リンク:timsong-cpp.github.io
つまり、クローズの失敗によってもフェイルビットが立つことはありうる。

クローズによらない失敗 (フェイルビットを立てる原因) と区別がつかなくなるのでエラーに対処したいならクローズ前後の両方でチェックしないといけないと思う。

デストラクタでクローズするとクローズの失敗に対処する機会がなくなるので明示的にクローズしたほうが良いという人はいる。
ただ、しっかりしたホスト環境の上で動くアプリケーションでクローズが失敗するような状況を心配する意味があるかというと……まああんまりない。
ありがとうございました。勉強になります。
ProgramminPlacePlus でのサンプルを元にしました。

なーる真面目にやるなら閉じる前後で色々とやらんといかんのですね。

今までは
readdata=string((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
の感じで、一気にファイル内容をstrigに取り込むような場合は、もう読み込みは無いのですぐに
ifs.close()してました。

デストラクタに任せてもいいのですが、今後も使わなくなったら、即close()したいと思います。
そんなにシビアにならんでもいいようですし・・・mOm
386
(1): デフォルトの名無しさん (オイコラミネオ MMdd-15C+) [sage] 2025/06/19(木) 23:34:50.70 ID:sZaRUqQbM(14/14) AAS
ここの部分はそうだけど
コンパイラの最適化が必ず元の動作を保証してるようなことを書いてるような人がいるから必ずしもそうではないよと
425: デフォルトの名無しさん (ワッチョイ 71a6-Y+Ow) [sage] 2025/06/21(土) 09:45:45.70 ID:cFB8HkI30(1) AAS
signedのオーバーフローは未定義だがunsignedのオーバーフローは定義されてる
あとC/C++はfenvで浮動小数点コプロセッサのモードを切り替えられるから、それを使うつもりのコードはコンパイル時に計算されると狂ったりはする
433
(1): デフォルトの名無しさん (オイコラミネオ MMc6-Rgxs) [sage] 2025/06/21(土) 16:15:28.70 ID:kXnmGuVNM(1/3) AAS
先の話題について、コンピュータではなく数学の世界まで振り返って考えてみると、
(1) a が実数の時
a * 100 / 100 = a
は恒等的に成り立つ。だからこの最適化は、精度を無視すれば
していい可能性が高い。
(2) a が整数で、整数としての割り算で考える場合、
a * 100 / 100 = a
は、一般的には成り立たない。
だから、a * 100 / 100 を a と最適化することはそもそも出来ない。
499: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7b32-0lSL) [sage] 2025/06/29(日) 16:51:17.70 ID:RnCZLFSE0(6/6) AAS
すまん。プロクシパターンではないな。
見当違いなことを書いてた。

まあこの場合は言語機能の確認のサンプルだと思うから設計がどうこうはあまり気にしなくていいんじゃね。
525: デフォルトの名無しさん (ワッチョイ ffa1-BzvG) [sage] 2025/07/06(日) 06:16:00.70 ID:B20RUTJT0(2/9) AAS
確認用サンプルコード:
外部リンク:ideone.com
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s