[過去ログ] C++相談室 part157 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
634: 2021/10/16(土)21:31 ID:ex7yhveJ(1) AAS
安全性の話じゃねえだろ
635: 2021/10/16(土)21:53 ID:EatL4YvD(1) AAS
わざわざC++なんか使っときながら勉強不足でモロアンチパターン踏んでるバカ
よくいるよね
636: 2021/10/16(土)22:09 ID:n5lzAHDj(1) AAS
どういうの?
637
(1): 2021/10/16(土)23:14 ID:gJanIysk(2/5) AAS
やっぱ普通fgets()して1行全体を読み込んでからstrtok_s()使いマスヨネー
638: 2021/10/16(土)23:16 ID:gJanIysk(3/5) AAS
文字列の数値化はstrtol()、strtoul()、strtof()、strtod()をオーバーロードしたwrapper関数を呼ぶテンプレートにすれば
cinと同等の型安全性と同等以上の使い勝手が実現にできるし、
639: 2021/10/16(土)23:41 ID:VgkITY1O(1/2) AAS
C++な人ってゴリゴリ自分でBNF的なparser combinator書くイメージだな
わざわざcstring使う人はいない気がする
640: 2021/10/16(土)23:45 ID:gJanIysk(4/5) AAS
いろんな人の手を経たプロジェクトだと CString(Windows) と std::string
(ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ
641: 2021/10/16(土)23:46 ID:VgkITY1O(2/2) AAS
えーっと・・・cstringはC言語のstring.hのことだよ
642: 2021/10/16(土)23:53 ID:gJanIysk(5/5) AAS
しらそん
いちいち
#ifdef __clusplus
# include <cstring>
# include <cmath>
#else
# include <string.h>
# include <math.h>
#endif
みたいな書き方するん会、
643: 2021/10/16(土)23:54 ID:6ga3nra2(1) AAS
json文字列として入力データを受け取って既存のjsonライブラリでパースするのが無難じゃないですかね
644: 2021/10/17(日)09:22 ID:4Zt4uwKf(1/5) AAS
C++でfgets使うアホの世界チャンピオンがいるな
645: 2021/10/17(日)09:40 ID:Rn6uB4uI(1/4) AAS
壊れても居ないものを直そうとするヴァカに言われたくはないし、
行の長さが定まっていないみたいなアフォな外部データ設計でない限り
fgets()で軽くて十分
646
(1): 2021/10/17(日)09:48 ID:4Zt4uwKf(2/5) AAS
直すって何を?
ああ、おまえさんの頭か
647
(1): 2021/10/17(日)11:05 ID:cds0CTiX(1/3) AAS
今ならメモリ不足とか気にする必要はほぼないから、
fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね
648: 2021/10/17(日)11:06 ID:XrR+wpGu(1/7) AAS
MSVCのfgetc()とfgets()は実行速度が遅い
649: 2021/10/17(日)11:19 ID:Rn6uB4uI(2/4) AAS
>>646
ちゃうちゃう、目新しいという以外にメリットも無いのに飛びつく誰かさんの方

>>647
行の長さが定まっていない仕様というのは大変恐ろしいことでありまして、
40TBの入力も許容するという意思表明なのであります
650: 2021/10/17(日)11:23 ID:XyIQiUpb(1/5) AAS
どれもこれもザックリすぎて話にならない
651: 2021/10/17(日)11:24 ID:Rn6uB4uI(3/4) AAS
こと外部データに関しては、読み込み終えないとサイズがわからない、みたいな仕様は悪手
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる
652
(3): 2021/10/17(日)11:27 ID:XyIQiUpb(2/5) AAS
fgets使うくらいならOS固有の関数を呼ぶべきだと思う
readとかReadFileのことね
653: 2021/10/17(日)11:30 ID:Rn6uB4uI(4/4) AAS
>>652
バッファリングを自力で実装するんか……
デバイスドライバ側である程度何とかしてくれるケースもあるかもしれんが
654: 2021/10/17(日)11:30 ID:0m7FLjXf(1/4) AAS
>>652
ええ…
655: 2021/10/17(日)11:47 ID:XrR+wpGu(2/7) AAS
真理情報:fgets()はUTF-16やUTF-32のテキストファイルを正しく読み込めない
656
(1): 2021/10/17(日)12:13 ID:0m7FLjXf(2/4) AAS
ワイド文字用の関数は使っちゃだめということ?
まあ使い方よくわからんけど
657: 2021/10/17(日)12:16 ID:XrR+wpGu(3/7) AAS
HTMLなりXMLなりJSONなりそれぞれパーサーがすでにあるのだからその恩恵を享受するのがナウなヤングの取るべき道でしょ
658
(2): 2021/10/17(日)12:21 ID:4Zt4uwKf(3/5) AAS
>>652
俺ならCreateFileMappingを使う

fgetsなんて頭の更新が止まった昭和時代の化石のうちでも地頭までひどいやつの使うものだな
659: 2021/10/17(日)12:21 ID:cds0CTiX(2/3) AAS
>>656
ワイド文字は環境によってUTF16だったりUTF32だったりで仕様が定まらないので使いにくい
660
(1): 2021/10/17(日)12:22 ID:XyIQiUpb(3/5) AAS
>>658のような勝手にmmap使っちゃうようなのがいるとバグだらけになるよ
661
(1): 2021/10/17(日)12:24 ID:XrR+wpGu(4/7) AAS
Java、Python、Ruby、Javscriptなどの他言語にファイル読込み処理を移植する徒労を考えないバカが集うスレはここですね
662: 2021/10/17(日)12:25 ID:jNwhUFcS(1) AAS
>>ID:NekA8urB の丸投げ君、己の課題であることを伏せて、お題スレに出題!
663: 2021/10/17(日)12:27 ID:MD8jEcOV(1) AAS
ここまでifstreamの話なし
664: 2021/10/17(日)12:28 ID:PatMwtBc(1) AAS
組み込みに近いところいると、大抵自炊に近い状態になるわ。
たとえばiostreamコンパイル通るやん、ってリンカがフラッシュ容量超えを宣告しやがる(フラッシュが640KiBもある豪華マイコンやで)。
上の方でrandom_deviceカスタマイズするの簡単にでけんやん、とか。ハード乱数なんて別にクラスに押し込んでも意味薄だけど。
665: 2021/10/17(日)12:29 ID:4Zt4uwKf(4/5) AAS
>>661
他言語に移植するかどうかはおまえさんが決めることじゃないよ
プログラム技術板で下品な言葉に頼るのは低脳の証明だぜ
666
(1): 2021/10/17(日)12:29 ID:XyIQiUpb(4/5) AAS
C++の標準ライブラリを使用しない前提でファイル読み込みを考えるならOS固有の関数を呼ぶべきって言ってるだけだよ
C++の標準ライブラリを使用しないでCの標準ライブラリ呼ぶには何か正当な理由がいると思う
667: 2021/10/17(日)12:35 ID:QqhGhKAl(1/3) AAS
標準ライブラリのストリームは遅延評価やらなんやら余計な思惑が付いてるのでとにかく重い。
668
(1): 2021/10/17(日)12:36 ID:Bq9qBgnd(1) AAS
>>666
<cstdio>はC++標準ライブラリの一部だよ
669: 2021/10/17(日)12:36 ID:0m7FLjXf(3/4) AAS
readもfreadもposixじゃろうよ
変わらんよ
670
(2): 2021/10/17(日)12:37 ID:QqhGhKAl(2/3) AAS
APIならサクサク快適。
1Gbps/s出る。
標準ライブラリは500Mbps/sくらいしかでない。
671: 2021/10/17(日)12:39 ID:0m7FLjXf(4/4) AAS
>>670
なんだよapiって
672: 2021/10/17(日)12:41 ID:XrR+wpGu(5/7) AAS
システムコールと言いたかったんだろうよ。察して差しあげろ
673
(1): 2021/10/17(日)12:41 ID:XyIQiUpb(5/5) AAS
>>668
C++からCの標準ライブラリを呼ぶならこちらを使えという意味

>>670
そういうのは具体的な根拠の提示が必要
674: 2021/10/17(日)12:45 ID:QqhGhKAl(3/3) AAS
>>673
俺は見たんだ。
675: 2021/10/17(日)13:12 ID:4Zt4uwKf(5/5) AAS
>>660
mmap+おまえさん→バグ
という化学反応みたいなもんか
676
(1): 2021/10/17(日)13:26 ID:GKP6XQtx(1/3) AAS
fgetsはバイトを扱うのか文字を扱うのか分かりにくいよね
Javaはバイトを読むInputStreamと文字を読むReaderに分かれてる
ファイルは当然文字だからInputStream、上位のReaderで文字コードや改行コードを加味する

Cはバイトも文字もchar[ ]で扱うからAPIもバイト扱い・文字扱いが混在してる
fgetsは改行コードで区切るからバイトではなく文字を扱う関数のように思えるけど、実際は文字コードなどは考慮されないのでバイト読み取り程度にしか使えないしワイドキャラクタも扱えない
中途半端だと思う
677: 2021/10/17(日)13:26 ID:GKP6XQtx(2/3) AAS
ファイルは当然文字
678: 2021/10/17(日)13:27 ID:GKP6XQtx(3/3) AAS
じゃなくて
ファイルは当然バイトね ごめん、、
679: 2021/10/17(日)13:44 ID:mjSP52s5(1) AAS
>>676
時代背景も考えずに中途半端とか言われても…
680: 2021/10/17(日)13:48 ID:cds0CTiX(3/3) AAS
まぁ、欧米の毛唐どもにもようやく必要性が理解できたchar8_tの導入が進めば文字コードはutf8に統一されていくとは思うけど、
utf8はutf8で冗長コードの問題があるからな…その辺のルールも統一しとかないとバグが量産されることになるな
681: 2021/10/17(日)13:54 ID:XrR+wpGu(6/7) AAS
2021年になってもテキストファイル読み込みの話をしなければならないC++の哀しさ
682: 2021/10/17(日)13:58 ID:7C23oe5i(1) AAS
ifstream とか
#include <iostream>
とか観るとダサいなーとしか思わない
683: 2021/10/17(日)14:06 ID:XrR+wpGu(7/7) AAS
Windowsのcode pageのような列挙型と文字セット判定クラスがC++で標準化されてないとテキスト読み込み処理を標準化できないでしょ
文字セット判定クラスは既存の判定ライブラリも標準インターフェースを介して使えるように的な
684
(1): 2021/10/17(日)21:21 ID:X4C5aaqV(1) AAS
すまんもうPythonでよくね
685: ハノン ◆QZaw55cn4c 2021/10/17(日)21:41 ID:iZHfLY3S(1) AAS
>>684
せやね
686
(1): 2021/10/18(月)07:17 ID:SjUVJOBm(1/7) AAS
C++ではなくCを使うというならまだそいつなりに筋が通る可能性があるが
C++でfgetsにしがみつくのはC++のライブラリについてこれなかっただけの
無能の中の無能だ
687
(2): 2021/10/18(月)07:27 ID:guTQadjs(1/2) AAS
C++でファイル操作にcstdio(というかFILE*)を使うべきだと宣うなら
せめてその場合の例外安全性くらい論じてくれないと話にならな
688
(1): 2021/10/18(月)07:44 ID:G16mKgJ/(1/5) AAS
>>658
Create !
File !
Mapping !
なんでテキストファイルを読み込むだけのためにそんんあ牛刀(しかも移植性が乏しい)を使わねばならんのじゃ……
だいたい標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
std::streambuf派生クラスとか自力で書くんか……

やっぱ頭にうんこ詰まってる人からはうんこしか出てきませんね……
689: 2021/10/18(月)07:47 ID:G16mKgJ/(2/5) AAS
>>686
fgets()の使用はC++についていけなくてしがみついているのではなくて、
天才の判断である
690
(1): 2021/10/18(月)07:52 ID:SjUVJOBm(2/7) AAS
>>688
あーおまえさん、あのAPIをベアで使ってるのか
ご苦労なこったな
C++使ってんのにクラス化って発想ねえのか
691
(2): 2021/10/18(月)07:56 ID:G16mKgJ/(3/5) AAS
>>687
>例外安全性くらい論じてくれないと
cstdioの仕様は突っ込んで調べてはいないがファイルの読み書きに関して
例外をスローすることがあるとしたら改悪で大層な失敗ライブラリとしか言いようが無い

ていうか例外安全というのは眉唾な概念でありまして、
40TBまでメモリを食いつぶしたら例外をスローするが
39.9999TBまでメモリを食いつぶしても何も起きないというコードは
システム全体の動作を担保できておらず設計したとは言えない
もっと定量的にプロアクティブな処置を講じるべきで、システムの正常動作を例外に依存させる設計は無い
692: 2021/10/18(月)07:57 ID:G16mKgJ/(4/5) AAS
>>690
ますますのうんこ発言ご苦労
で、標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
693: 2021/10/18(月)08:00 ID:pufTxU/Z(1) AAS
標準じゃないとか言うから突っ込まれてるのに
694: 2021/10/18(月)08:13 ID:G16mKgJ/(5/5) AAS
この議論の中で自作クラス推しはポエミーすぐる
やっぱうんこ製造機な人は仕方が無い
695: 2021/10/18(月)08:23 ID:SjUVJOBm(3/7) AAS
>>892
おまえさん他言語への移植がどうたら言ってた?
696: 2021/10/18(月)09:00 ID:SjUVJOBm(4/7) AAS
C++でクラス作るなって
Cで関数作るなに匹敵するすげえ主張だな
最長不倒main関数とかw
697: 2021/10/18(月)10:44 ID:Qq+Ry0m8(1) AAS
Cだけやたら詳しくてクラスの仕組み知らないウン古参とか居るからな
698: 2021/10/18(月)11:01 ID:I7uU9DyP(1) AAS
MISRA-C 縛りの組み込み屋とかな
699
(1): 2021/10/18(月)11:20 ID:PPwA/bGd(1/6) AAS
C++からCにソースコードを移植せざるを得ないことがあるから、Cプログラマでもクラスやテンプレートの知識は必須でしょ
700: 2021/10/18(月)11:27 ID:CHllzYZP(1) AAS
cの場合ファイルでクラスを実現するわけだけど、その縛りがある方がきれいになるよね
701: 2021/10/18(月)11:35 ID:cow76Y8p(1) AAS
twitterでCやC++を検索したい時、検索ボックスに
(C 言語) OR cplusplus OR cpp OR @i -@i lang:ja
と入れると割りといいことが分かった。
さらに、検索ボックスの右にある「…」のボタンを押して「検索を保存」しておくと、この検索文字列が勝手に消えない。
702: 2021/10/18(月)13:03 ID:nWV7c8cM(1) AAS
::fgetsってstd::getlineに対するメリットある?
703
(1): 2021/10/18(月)13:40 ID:inWWc53E(1) AAS
getlineがそもそも遅くてダメ
fopenからのfread一択
704: 2021/10/18(月)15:14 ID:PPwA/bGd(2/6) AAS
$ man 3 getline
...
BUGS
There are no wide character versions of getdelim() or getline().
705: 2021/10/18(月)15:52 ID:r9t2S6+p(1) AAS
>>703
fread速くて素敵
706
(1): 2021/10/18(月)15:58 ID:bmSCfWZq(1/2) AAS
fopen/fread/fseekだと2GBを超えるファイルが扱えないよね
707: 2021/10/18(月)16:22 ID:SjUVJOBm(5/7) AAS
2G超のファイルはもう珍しくもなくなったな
708
(1): 2021/10/18(月)19:03 ID:PPwA/bGd(3/6) AAS
>>706
fread()は2GB制約なく扱えるのでは?
709: 2021/10/18(月)19:10 ID:SjUVJOBm(6/7) AAS
狭い視野でイキッてるヒヨッ子
710
(2): 2021/10/18(月)19:38 ID:bmSCfWZq(2/2) AAS
>>708
環境によってはそういう実装もあるだろうけど、保証はされていないはず
実際MSVCのランタイムとかはダメでしょ
711
(1): 2021/10/18(月)19:53 ID:wnQbvQnY(1) AAS
2GBってOSの制限じゃなくて?
712: 2021/10/18(月)19:56 ID:PPwA/bGd(4/6) AAS
>>710
「ダメでしょ」っていう無駄な煽り質問じゃなくて、fread()の制約について触れたブログのURLとか教えてもらえますか?
713
(1): 2021/10/18(月)20:12 ID:SjUVJOBm(7/7) AAS
MSVCつってんだろ
そっから自分で調べろよ
714
(1): 2021/10/18(月)20:19 ID:PPwA/bGd(5/6) AAS
>>713
見つからないンだわ
715: 2021/10/18(月)20:20 ID:q3S383yy(1) AAS
>>699
>C++からCにソースコードを移植せざるを得ないことがあるから、

いまどきそんなのある?思いつかない。
716
(1): 2021/10/18(月)20:40 ID:guTQadjs(2/2) AAS
>>691
違うよファイル読み込み以外の場所での例外発生時にFILE*をリークさせないための設計の話だよ
君が何も考えてないのはよく分かった
717: 2021/10/18(月)20:48 ID:9/kwvMtE(1) AAS
>>711
今時のOSで2GBの壁とか無いでしょ
718: 2021/10/18(月)20:52 ID:PPwA/bGd(6/6) AAS
書いてから気づいたけど >>714 は、見つからねンだわ、のほうがよかった
719: 2021/10/19(火)00:01 ID:L2ZQN19z(1/11) AAS
MSVCのランタイムでfread()が2GB越えファイルを扱えないって話のURLはどこですか?
720
(2): 2021/10/19(火)00:34 ID:FM0S3WDg(1/4) AAS
>>716
スコープを抜けたらファイルをクローズしてくれるから安全、と考える
藻前の考えが浅いのもまた明らかだ
システム的にファイルをぶち切られること自体が致命的だったら?
また、クローズがエラーになったとき何が起きるか
(ただクローズするだけのクラスならエラー通知先は無い。例外を飛ばしたら即パニック

というわけで実用的なリソースリーク対策はコードの追加を伴うから
fgets()にリーク対策するのと言うほど違いが無いワケ
721
(4): 2021/10/19(火)00:41 ID:FM0S3WDg(2/4) AAS
例外安全はやれるならやった方が良いのは認めるが
他人様が作ったライブラリの中に生ポをメンバにもつクラスがあったら穴ができる
まだこれぐらいなら静的解析で発見できるかもしれんが
上で述べたようなcloseのエラーチェックのスキップとか循環参照とかは機械的検出が難しい
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体するのはソフトウェア工学的ではない

というわけでやっぱfgets()を使いつつ例外を起こさないように書くのに比べて言うほどマシでないワケ
722
(4): 2021/10/19(火)02:03 ID:2It6fcyB(1) AAS
君が例外安全というものについて何一つ知らない事はよく分かった
無知は罪じゃないから今から勉強し直そうね
知ってるふりしていい加減な付け焼き刃の知識を振りかざすのは恥ずかしいだけじゃなくてお客や同僚に迷惑を掛けるからね
723
(1): 2021/10/19(火)02:48 ID:gI621CUN(1/5) AAS
コードや証拠もなしに噛み合わない話の空中戦とかするくらいなら反論しなくていいから黙ってよう
どちらが正しいかはみんな分かっているのだから
724: 2021/10/19(火)06:05 ID:KuG8Rhix(1) AAS
了解
725: 2021/10/19(火)06:18 ID:/lTW/4j8(1) AAS
cout << sizeof ftell(nullptr);
726
(1): 2021/10/19(火)07:21 ID:N+EpsguK(1/3) AAS
自分で試す能力がなくてURL乞食しとんのか
727
(1): 2021/10/19(火)07:46 ID:FM0S3WDg(3/4) AAS
馬鹿は正当性を定義も証明もできない事柄に正当性を見出してしまう好例
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できないというのが真実
それが証拠にいい加減でない知識として>>721以外の何があるのか>>722は示せていない

起こることが既知なら対処を平にコードに書けば良いのに
コードに明示されておらず、検証もしきれない実行パスをボコボコ作っといて安全と言い張る神経、
728: 2021/10/19(火)07:57 ID:FM0S3WDg(4/4) AAS
ていうか知能の問題かもしれん……

>どちらが正しいかはみんな分かっているのだから
衆愚の言い草
「何が」例外安全なのかきちんと定義してから出直してホスイ、
729
(1): 2021/10/19(火)08:04 ID:N+EpsguK(2/3) AAS
暴れてるやつRAIIって発想もないようだしな
730: 2021/10/19(火)08:46 ID:T9srRJav(1) AAS
>>726
Windows環境自体がないのでは
731
(2): 2021/10/19(火)08:51 ID:gI621CUN(2/5) AAS
5chは煽ると答えが返ってくるという都市伝説があるらしい
732
(2): 2021/10/19(火)10:31 ID:L2ZQN19z(2/11) AAS
バグ報告する場合は再現条件を提示する責任がある
再現できなければ「おま環」で放置される

もしかしてこのスレの住人は、立民とか共産党の支持者だったりするの?
挙証責任って概念を知らないかな
モリカケ・桜を見る会問題にのめりこむような人は技術系の職業に向いてないから転職したほうがいいね
733: 2021/10/19(火)10:37 ID:JueBMEYA(1) AAS
最後の一文、それを断言できるのはその問題にのめりこんでる証拠のような・・・
1-
あと 269 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.035s