[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/05 17:41 / Filesize : 300 KB / Number-of Response : 1027
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part157



1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net]
前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/

666 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:19:23.83 ID:Rn6uB4uI.net]
>>646
ちゃうちゃう、目新しいという以外にメリットも無いのに飛びつく誰かさんの方

>>647
行の長さが定まっていない仕様というのは大変恐ろしいことでありまして、
40TBの入力も許容するという意思表明なのであります

667 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:23:35.72 ID:XyIQiUpb.net]
どれもこれもザックリすぎて話にならない

668 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:24:11.36 ID:Rn6uB4uI.net]
こと外部データに関しては、読み込み終えないとサイズがわからない、みたいな仕様は悪手
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる

669 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:27:15.30 ID:XyIQiUpb.net]
fgets使うくらいならOS固有の関数を呼ぶべきだと思う
readとかReadFileのことね

670 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:30:16.75 ID:Rn6uB4uI.net]
>>652
バッファリングを自力で実装するんか……
デバイスドライバ側である程度何とかしてくれるケースもあるかもしれんが

671 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:30:46.37 ID:0m7FLjXf.net]
>>652
ええ…

672 名前:デフォルトの名無しさん [2021/10/17(日) 11:47:07.94 ID:XrR+wpGu.net]
真理情報:fgets()はUTF-16やUTF-32のテキストファイルを正しく読み込めない

673 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:13:01.70 ID:0m7FLjXf.net]
ワイド文字用の関数は使っちゃだめということ?
まあ使い方よくわからんけど

674 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:16:45.02 ID:XrR+wpGu.net]
HTMLなりXMLなりJSONなりそれぞれパーサーがすでにあるのだからその恩恵を享受するのがナウなヤングの取るべき道でしょ



675 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:21:07.90 ID:4Zt4uwKf.net]
>>652
俺ならCreateFileMappingを使う

fgetsなんて頭の更新が止まった昭和時代の

676 名前:サ石のうちでも地頭までひどいやつの使うものだな []
[ここ壊れてます]

677 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:21:44.62 ID:cds0CTiX.net]
>>656
ワイド文字は環境によってUTF16だったりUTF32だったりで仕様が定まらないので使いにくい

678 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:22:29.87 ID:XyIQiUpb.net]
>>658のような勝手にmmap使っちゃうようなのがいるとバグだらけになるよ

679 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:24:50.71 ID:XrR+wpGu.net]
Java、Python、Ruby、Javscriptなどの他言語にファイル読込み処理を移植する徒労を考えないバカが集うスレはここですね

680 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:25:21.31 ID:jNwhUFcS.net]
>>ID:NekA8urB の丸投げ君、己の課題であることを伏せて、お題スレに出題!

681 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:27:57.21 ID:MD8jEcOV.net]
ここまでifstreamの話なし

682 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:28:53.83 ID:PatMwtBc.net]
組み込みに近いところいると、大抵自炊に近い状態になるわ。
たとえばiostreamコンパイル通るやん、ってリンカがフラッシュ容量超えを宣告しやがる(フラッシュが640KiBもある豪華マイコンやで)。
上の方でrandom_deviceカスタマイズするの簡単にでけんやん、とか。ハード乱数なんて別にクラスに押し込んでも意味薄だけど。

683 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:29:39.45 ID:4Zt4uwKf.net]
>>661
他言語に移植するかどうかはおまえさんが決めることじゃないよ
プログラム技術板で下品な言葉に頼るのは低脳の証明だぜ

684 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:29:57.14 ID:XyIQiUpb.net]
C++の標準ライブラリを使用しない前提でファイル読み込みを考えるならOS固有の関数を呼ぶべきって言ってるだけだよ
C++の標準ライブラリを使用しないでCの標準ライブラリ呼ぶには何か正当な理由がいると思う



685 名前:デフォルトの名無しさん [2021/10/17(日) 12:35:21.04 ID:QqhGhKAl.net]
標準ライブラリのストリームは遅延評価やらなんやら余計な思惑が付いてるのでとにかく重い。

686 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:36:36.60 ID:Bq9qBgnd.net]
>>666
<cstdio>はC++標準ライブラリの一部だよ

687 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:36:58.22 ID:0m7FLjXf.net]
readもfreadもposixじゃろうよ
変わらんよ

688 名前:デフォルトの名無しさん [2021/10/17(日) 12:37:50.89 ID:QqhGhKAl.net]
APIならサクサク快適。
1Gbps/s出る。
標準ライブラリは500Mbps/sくらいしかでない。

689 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:39:23.66 ID:0m7FLjXf.net]
>>670
なんだよapiって

690 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:41:11.30 ID:XrR+wpGu.net]
システムコールと言いたかったんだろうよ。察して差しあげろ

691 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:41:18.69 ID:XyIQiUpb.net]
>>668
C++からCの標準ライブラリを呼ぶならこちらを使えという意味

>>670
そういうのは具体的な根拠の提示が必要

692 名前:デフォルトの名無しさん [2021/10/17(日) 12:45:16.88 ID:QqhGhKAl.net]
>>673
俺は見たんだ。

693 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:12:31.90 ID:4Zt4uwKf.net]
>>660
mmap+おまえさん→バグ
という化学反応みたいなもんか

694 名前:デフォルトの名無しさん [2021/10/17(日) 13:26:14.73 ID:GKP6XQtx.net]
fgetsはバイトを扱うのか文字を扱うのか分かりにくいよね
Javaはバイトを読むInputStreamと文字を読むReaderに分かれてる
ファイルは当然文字だからInputStream、上位のReaderで文字コードや改行コードを加味する

Cはバイトも文字もchar[ ]で扱うからAPIもバイト扱い・文字扱いが混在してる
fgetsは改行コードで区切るからバイトではなく文字を扱う関数のように思えるけど、実際は文字コードなどは考慮されないのでバイト読み取り程度にしか使えないしワイドキャラクタも扱えない
中途半端だと思う



695 名前:デフォルトの名無しさん [2021/10/17(日) 13:26:48.31 ID:GKP6XQtx.net]
ファイルは当然文字

696 名前:デフォルトの名無しさん [2021/10/17(日) 13:27:18.36 ID:GKP6XQtx.net]
じゃなくて
ファイルは当然バイトね ごめん、、

697 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:44:25.91 ID:mjSP52s5.net]
>>676
時代背景も考えずに中途半端とか言われても…

698 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:48:20.62 ID:cds0CTiX.net]
まぁ、欧米の毛唐どもにもようやく必要性が理解できたchar8_tの導入が進めば文字コードはutf8に統一されていくとは思うけど、
utf8はutf8で冗長コードの問題があるからな…その辺のルールも統一しとかないとバグが量産されることになるな

699 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:54:50.76 ID:XrR+wpGu.net]
2021年になってもテキストファイル読み込みの話をしなければならないC++の哀しさ

700 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:58:16.96 ID:7C23oe5i.net]
ifstream とか
#include <iostream>
とか観るとダサいなーとしか思わない

701 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 14:06:15.29 ID:XrR+wpGu.net]
Windowsのcode pageのような列挙型と文字セット判定クラスがC++で標準化されてないとテキスト読み込み処理を標準化できないでしょ
文字セット判定クラスは既存の判定ライブラリも標準インターフェースを介して使えるように的な

702 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:21:43.52 ID:X4C5aaqV.net]
すまんもうPythonでよくね

703 名前:ハノン mailto:sage [2021/10/17(日) 21:41:38.58 ID:iZHfLY3S.net]
>>684
せやね

704 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:17:36.06 ID:SjUVJOBm.net]
C++ではなくCを使うというならまだそいつなりに筋が通る可能性があるが
C++でfgetsにしがみつくのはC++のライブラリについてこれなかっただけの
無能の中の無能だ



705 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:27:56.24 ID:guTQadjs.net]
C++でファイル操作にcstdio(というかFILE*)を使うべきだと宣うなら
せめてその場合の例外安全性くらい論じてくれないと話にならな

706 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:44:19.97 ID:G16mKgJ/.net]
>>658
Create !
File !
Mapping !
なんでテキストファイルを読み込むだけのためにそんんあ牛刀(しかも移植性が乏しい)を使わねばならんのじゃ……
だいたい標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
std::streambuf派生クラスとか自力で書くんか……

やっぱ頭にうんこ詰まってる人からはうんこしか出てきませんね……

707 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:47:04.30 ID:G16mKgJ/.net]
>>686
fgets()の使用はC++についていけなくてしがみついているのではなくて、
天才の判断である

708 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:52:03.70 ID:SjUVJOBm.net]
>>688
あーおまえさん、あのAPIをベアで使ってるのか
ご苦労なこったな
C++使ってんのにクラス化って発想ねえのか

709 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:56:09.77 ID:G16mKgJ/.net]
>>687
>例外安全性くらい論じてくれないと
cstdioの仕様は突っ込んで調べてはいないがファイルの読み書きに関して
例外をスローすることがあるとしたら改悪で大層な失敗ライブラリとしか言いようが無い

ていうか例外安全というのは眉唾な概念でありまして、
40TBまでメモリを食いつぶしたら例外をスローするが
39.9999TBまでメモリを食いつぶしても何も起きないというコードは
システム全体の動作を担保できておらず設計したとは言えない
もっと定量的にプロアクティブな処置を講じるべきで、システムの正常動作を例外に依存させる設計は無い

710 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:57:48.58 ID:G16mKgJ/.net]
>>690
ますますのうんこ発言ご苦労
で、標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……

711 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:00:37.32 ID:pufTxU/Z.net]
標準じゃないとか言うから突っ込まれてるのに

712 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:13:52.41 ID:G16mKgJ/.net]
この議論の中で自作クラス推しはポエミーすぐる
やっぱうんこ製造機な人は仕方が無い

713 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:23:54.90 ID:SjUVJOBm.net]
>>892
おまえさん他言語への移植がどうたら言ってた?

714 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 09:00:47.23 ID:SjUVJOBm.net]
C++でクラス作るなって
Cで関数作るなに匹敵するすげえ主張だな
最長不倒main関数とかw



715 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 10:44:23.86 ID:Qq+Ry0m8.net]
Cだけやたら詳しくてクラスの仕組み知らないウン古参とか居るからな

716 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:01:27.83 ID:I7uU9DyP ]
[ここ壊れてます]

717 名前:.net mailto: MISRA-C 縛りの組み込み屋とかな []
[ここ壊れてます]

718 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:20:29.21 ID:PPwA/bGd.net]
C++からCにソースコードを移植せざるを得ないことがあるから、Cプログラマでもクラスやテンプレートの知識は必須でしょ

719 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:27:00.40 ID:CHllzYZP.net]
cの場合ファイルでクラスを実現するわけだけど、その縛りがある方がきれいになるよね

720 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:35:56.70 ID:cow76Y8p.net]
twitterでCやC++を検索したい時、検索ボックスに
(C 言語) OR cplusplus OR cpp OR @i -@i lang:ja
と入れると割りといいことが分かった。
さらに、検索ボックスの右にある「…」のボタンを押して「検索を保存」しておくと、この検索文字列が勝手に消えない。

721 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 13:03:36.15 ID:nWV7c8cM.net]
::fgetsってstd::getlineに対するメリットある?

722 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 13:40:59.86 ID:inWWc53E.net]
getlineがそもそも遅くてダメ
fopenからのfread一択

723 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:14:30.34 ID:PPwA/bGd.net]
$ man 3 getline
...
BUGS
There are no wide character versions of getdelim() or getline().

724 名前:デフォルトの名無しさん [2021/10/18(月) 15:52:23.39 ID:r9t2S6+p.net]
>>703
fread速くて素敵



725 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:58:38.18 ID:bmSCfWZq.net]
fopen/fread/fseekだと2GBを超えるファイルが扱えないよね

726 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 16:22:14.95 ID:SjUVJOBm.net]
2G超のファイルはもう珍しくもなくなったな

727 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:03:20.24 ID:PPwA/bGd.net]
>>706
fread()は2GB制約なく扱えるのでは?

728 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:10:28.52 ID:SjUVJOBm.net]
狭い視野でイキッてるヒヨッ子

729 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:38:54.73 ID:bmSCfWZq.net]
>>708
環境によってはそういう実装もあるだろうけど、保証はされていないはず
実際MSVCのランタイムとかはダメでしょ

730 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:53:44.83 ID:wnQbvQnY.net]
2GBってOSの制限じゃなくて?

731 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:56:34.12 ID:PPwA/bGd.net]
>>710
「ダメでしょ」っていう無駄な煽り質問じゃなくて、fread()の制約について触れたブログのURLとか教えてもらえますか?

732 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:12:41.63 ID:SjUVJOBm.net]
MSVCつってんだろ
そっから自分で調べろよ

733 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:19:55.17 ID:PPwA/bGd.net]
>>713
見つからないンだわ

734 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:20:14.22 ID:q3S383yy.net]
>>699
>C++からCにソースコードを移植せざるを得ないことがあるから、

いまどきそんなのある?思いつかない。



735 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:40:37.41 ID:guTQadjs.net]
>>691
違うよファイル読み込み以外の場所での例外発生時にFILE*をリークさせないための設計の話だよ
君が何も考えてないのはよく分かった

736 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:48:11.38 ID:9/kwvMtE.net]
>>711
今時のOSで2GBの壁とか無いでしょ

737 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:52:27.87 ID:PPwA/bGd.net]
書いてから気づいたけど >>714 は、見つからねンだわ、のほうがよかった

738 名前:デフォルトの名無しさん [2021/10/19(火) 00:01:14.73 ID:L2ZQN19z.net]
MSVCのランタイムでfread()が2GB越えファイルを扱えないって話のURLはどこですか?

739 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 00:34:16.59 ID:FM0S3WDg.net]
>>716
スコープを抜けたらファイルをクローズしてくれるから安全、と考える
藻前の考えが浅いのもまた明らかだ
システム的にファイルをぶち切られること自体が致命的だったら?
また、クローズがエラーになったとき何が起きるか
(ただクローズするだけのクラスならエラー通知先は無い。例外を飛ばしたら即パニック

というわけで実用的なリソースリーク対策はコードの追加を伴うから
fgets()にリーク対策するのと言うほど違いが無いワケ

740 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 00:41:16.25 ID:FM0S3WDg.net]
例外安全はやれるならやった方が良いのは認めるが
他人様が作ったライブラリの中に生ポをメンバにもつクラスがあったら穴ができる
まだこれぐらいなら静的解析で発見できるかもしれんが
上で述べたようなcloseのエラーチェックのスキップとか循環参照とかは機械的検出が難しい
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体するのはソフトウェア工学的ではない

というわけでやっぱfgets()を使いつつ例外を起こさないように書くのに比べて言うほどマシでないワケ

741 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 02:03:24.24 ID:2It6fcyB.net]
君が例外安全というものについて何一つ知らない事はよく分かった
無知は罪じゃないから今から勉強し直そうね
知ってるふりしていい加減な付け焼き刃の知識を振りかざすのは恥ずかしいだけじゃなくてお客や同僚に迷惑を掛けるからね

742 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 02:48:34.85 ID:gI621CUN.net]
コードや証拠もなしに噛み合わない話の空中戦とかするくらいなら反論しなくていいから黙ってよう
どちらが正しいかはみんな分かっているのだから

743 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 06:05:15.24 ID:KuG8Rhix.net]
了解

744 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 06:18:55.46 ID:/lTW/4j8.net]
cout << sizeof ftell(nullptr);



745 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:21:43.01 ID:N+EpsguK.net]
自分で試す能力がなくてURL乞食しとんのか

746 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:46:29.59 ID:FM0S3WDg.net]
馬鹿は正当性を定義も証明もできない事柄に正当性を見出してしまう好例
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できないというのが真実
それが証拠にいい加減でない知識として>>721以外の何があるのか>>722は示せていない

起こることが既知なら対処を平にコードに書けば良いのに
コードに明示されておらず、検証もしきれない実行パスをボコボコ作っといて安全と言い張る神経、

747 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:57:14.86 ID:FM0S3WDg.net]
ていうか知能の問題かもしれん……

>どちらが正しいかはみんな分かっているのだから
衆愚の言い草
「何が」例外安全なのかきちんと定義してから出直してホスイ、

748 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:04:24.05 ID:N+EpsguK.net]
暴れてるやつRAIIって発想もないようだしな

749 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:46:39.19 ID:T9srRJav.net]
>>726
Windows環境自体がないのでは

750 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:51:30.49 ID:gI621CUN.net]
5chは煽ると答えが返ってくるという都市伝説があるらしい

751 名前:デフォルトの名無しさん [2021/10/19(火) 10:31:03.98 ID:L2ZQN19z.net]
バグ報告する場合は再現条件を提示する責任がある
再現できなければ「おま環」で放置される

もしかしてこのスレの住人は、立民とか共産党の支持者だったりするの?
挙証責任って概念を知らないかな
モリカケ・桜を見る会問題にのめりこむような人は技術系の職業に向いてないから転職したほうがいいね

752 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:37:08.97 ID:JueBMEYA.net]
最後の一文、それを断言できるのはその問題にのめりこんでる証拠のような・・・

753 名前:デフォルトの名無しさん [2021/10/19(火) 10:38:50.31 ID:L2ZQN19z.net]
お前は泥棒をしたのだから泥棒したことをお前自身が証明しろ、と言いがかりをつけ続ける取調官とか怖いだろ
それと同じことを一部の本スレ住人や立民共産信者は言ってるわけだよ

754 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:46:13.46 ID:ZI1Nh3C2.net]
モリカケ・桜を見る会問題にのめりこんでいない人は
突然無関係のスレでモリカケ・桜を見る会問題の話題を出さないからね
常に意識している(のめりこんでいる)から技術系のスレで政治的な話をしてしまう



755 名前:デフォルトの名無しさん [2021/10/19(火) 10:55:44.60 ID:L2ZQN19z.net]
陰謀論など思い込みの激しい人は正義感でやってるから周囲の忠告に耳を貸さない
信者同士が共鳴しあうエコーチェンバー効果

756 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:12:58.88 ID:ZI1Nh3C2.net]
「最近、この沼にはまって抜け出せなくなる人が多いんだよ、困ったものだね」と言いながら沼にはまっている人↑

757 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:22:09.22 ID:L2ZQN19z.net]
MSVCでfread()が2GB以上のファイルを扱えないことを証明してくれさえすればいいんだよ、簡単だろ?

758 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:31:07.37 ID:L2ZQN19z.net]
自分は雑なバグ報告しておいて、相手には執拗に問題解決を迫るキチガイとかイヤだろ?

759 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:40:48.93 ID:gI621CUN.net]
そもそもfreadと何をどんな環境で比較して結果どうだったなどの証拠がない件

760 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:09:53.53 ID:ZI1Nh3C2.net]
正直興味のない話なので関わらなきゃいいじゃんって言われるだろうけど
「相手には執拗に問題解決を迫るキチガイとかイヤだろ?」と行っている本人が「証明してくれさえすればいいんだ」と迫っているところを見る限り
やっぱり本人も沼に入っているのに気づいていないんだな、と感じる小雨が降る今日この頃

761 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:19:05.04 ID:L2ZQN19z.net]
いまさら何言ってんだ?
このスレは、ダニング=クルーガー効果でイキったバカをからかうためのスレだぞ

762 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:35:47.82 ID:N+EpsguK.net]
都合の悪いものは見えないらしいな

763 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:50:43.47 ID:gI621CUN.net]
スレタイトルのとおりC++に関する相談をするためのスレですよ
ID:L2ZQN19z7 は他人を煽るためだけに書き込んでるように見えるので少し風当たりが強くなってるだけです

764 名前:デフォルトの名無しさん [2021/10/19(火) 13:20:26.19 ID:L2ZQN19z.net]
マイクロソフトのような大企業がfread()の致命的な不具合を永年にわたって野放しにするはずがないという常識や判断力すらない人は、いろんな陰謀論にハマるだろうね
ご本人はそれはそれで楽しい人生なんだろうけどIT技術者としてはどうかなって話
ま、反ワクチンの医者もごくまれにいるから、陰謀論にハマる人はどんな業界にもいるんだろう



765 名前:デフォルトの名無しさん [2021/10/19(火) 13:25:05.49 ID:L2ZQN19z.net]
ビル・ゲイツがワクチンの「狂った陰謀論」を改めて否定 | Forbes JAPAN
https://forbesjapan.com/articles/detail/39513
2021/01/28 12:30

マイクロソフトの共同創業者でビリオネアのビル・ゲイツは、パンデミックを受けてSNS上で拡散した、彼に関する陰謀論の多さに「非常に驚いている」と述べ、ワクチンの普及の妨げになりかねない誤情報への懸念を示した。

ゲイツは1月27日のロイターの取材に、彼と米国のコロナ対策のトップであるアンソニー・ファウチ博士についての「狂った陰謀論」は、パンデミックに対する恐怖心とソーシャルメディアの台頭により引き起こされた可能性が高いと述べた。

パンデミックに関する最も目を引く陰謀論のいくつかは、ゲイツが「世界の人々にマイクロチップを埋め込むためにワクチンを活用しようとしている」という、根拠のない主張に基づいている。

ゲイツは、人々が本当にこれらの陰謀論を信じているのかどうかを知りたいと話した。「それは、人々の行動をどのように変えるのだろう? そして、我々はどのようにして、これを最小限に抑えるべきだったのだろう?」と、彼は問いかけた。

766 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 13:25:23.12 ID:4nkSMT7f.net]
Microsoft、不具合修正一年くらいかかったよ

767 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 13:53:44.09 ID:emsejTNf.net]
MSは直らんなあ
google よりはマシかもな

768 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 15:13:15.33 ID:gI621CUN.net]
単発IDは自演の可能性ありますね

769 名前:デフォルトの名無しさん [2021/10/19(火) 19:19:45.97 ID:GtxXqLyf.net]
2000年ごろのLinuxユーザーなら、ゲイツがワクチンにウィルス仕込んでると大騒ぎしてただろうけどな。

770 名前:デフォルトの名無しさん [2021/10/19(火) 19:24:26.03 ID:GtxXqLyf.net]
>>732
ご指摘の動作は弊社ソフトウェア製品の問題点であることが確認されました。
引き続き調査を行います。
進展状況はID2273405でご確認できます。
今後も弊社製品ご愛顧のほどよろしくお願いします。

771 名前:デフォルトの名無しさん [2021/10/19(火) 19:28:33.46 ID:GtxXqLyf.net]
>>732
「証拠はあんのか?おお〜ん?」と言ってる晋三が暴力団に見える。
証拠がなくたって傍目に明らか。
なんで5000円でスイートに泊まれるわけない。
嘘つかずにごめんなさいしたら良かっただけ。

772 名前:デフォルトの名無しさん [2021/10/19(火) 19:52:06.47 ID:L2ZQN19z.net]
>>752
5Gにつながるためにもちゃんとワクチン2回打てよ
11月になったらワクチン接種会場がさらに減るぞ

773 名前:デフォルトの名無しさん [2021/10/19(火) 19:56:28.13 ID:GtxXqLyf.net]
>>753
桜を見る会に桜井誠は呼ばれたのか?

774 名前:ハノン mailto:sage [2021/10/19(火) 20:03:42.12 ID:KyySFZDA.net]
>>731
炎上学習法とはよくいわれたものです…



775 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 20:09:58.44 ID:L2ZQN19z.net]
違います
今後の心配は園遊会やお正月などのお食事会にモェ呼ばれるのか、という点です

776 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:14:37.76 ID:0k8Pnquo.net]
>>729
RAIIだから例外安全、と言うのは短絡的
文盲に読み飛ばされたのかしらんが>>720>>721において
@ オブジェクトが個々に盲目的にリソースを解放するのが常に安全と言えるか?
A リソース解放時にエラーが生じたものを無視しておいて安全と言えるか?(あるいはコードの追加無しに無視せずに済む方法があるか?)

777 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:16:51.24 ID:0k8Pnquo.net]
B リソース解放を解放しない瑕疵があるオブジェクトの混入が無いことをどうやって保証するのか?
という3つの問題提起をしているのに対して、あいまいに取り繕って逃げたのが>>722

@〜Bに定説が無いとすれば(実際無いのだが)、例外安全というのは信奉する馬鹿の数だけ定義があるという話

778 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:19:57.61 ID:NMVwWGr0.net]
盲目じゃねえし
uncaught_excptionsも知らんようだな
って言うとにわかで調べてシッタカこくんだろうけど
今の今までおくびにも出さなかったことで
どの程度の野郎かは察しがついてる

779 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:21:14.97 ID:0k8Pnquo.net]
だいたい火災で炎上するビルの8階から人が飛び降りたとして、
例外安全とやらでできることはせいぜい人を地面に軟着陸させて生命を守るぐらいの話で、
ビルの火災を消化はしないし(それをやるのは消防署
消化後のビルを復旧はしないし(それをやるのは各種の工事屋
復旧した8界のオフィスに飛び降りた人を戻して業務を再開させることもしない(それをやるのやEmployer

普通の人はまず火災を防ぐことを第一に目指すのだが、
例外安全主義者はそんなスタイルを古いと言い、例外安全に作っとけば安全と言い張るのだ

780 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:31:45.94 ID:NMVwWGr0.net]
全然関係ねえよ
マジでビルから飛び降りて氏んだら?

781 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:33:15.63 ID:0k8Pnquo.net]
>>759
@〜Bのどれにも掠りもしない反応
(を出したことによって知能程度に察しが付く

782 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:35:17.39 ID:0k8Pnquo.net]
でfgets()に戻るが、以下のコードの例外の捕捉のコストは話の本筋ではないので無視していただきたいのだが
(そのコストが気になるなら「スコープを抜けたら閉じるFILE*」みたいなブツを作ったらfclose()のエラー処理以外は同じにできる)、
void foo() {
 FILE* fp = fopen(...); // fpがNULLだった場合のチェックは記載省略
 try {
  Bar x, y, z;
  (fgets()とかのコード)
 } catch (Exception ex)
  fclose(fp)
}
}
とかなコードを見たら普通の人は「chatchに飛んできて大丈夫なんか?」とtryブロック内をチェックするが
(x, y, zの解放が保証される、とかは関係無しに
例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る

783 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:39:44.59 ID:kO478Zp/.net]
バカの主張: バグがあるかも知れないから例外安全は「使い物にならない」

アホすぎだろ…

784 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:44:50.14 ID:0k8Pnquo.net]
>>764
>例外安全はやれるならやった方が良いのは認める(>>721
>例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できい(>>727
というわけで文盲に言われたくは無い

特定のケースにおいて、例外でエラー処理を安全に書けてその後のリカバリーもスムーズにいきますよ、
みたいな特定方面で有効なソリューションとして例外安全を勧めるのであれば問題無いのだが、
テキストファイルをfgets()で読むという絶対的に正しい事柄への批判に無理矢理つなげようとするから
話がおかしくなる



785 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:45:51.66 ID:GCto648C.net]
>>763
x,y,zのデストラクタならcatchに飛んだ時に呼ばれることは保証されてるけど…?
例えばyのコンストラクタで例外飛んでもxは~Bar()呼んでzは呼ばないくらいコンパイラがやってくれるけど…?
そういうの忘れずやってくれるのがコンパイラだから任せようぜっていうのがRAIIなんだけど…?

まさかこんな事も知らずに例外安全がどうのと偉そうに論じてたの?嘘だろ?

786 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:47:08.92 ID:GCto648C.net]
>>765
お前はもう喋るなド初心者

787 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:47:29.23 ID:0k8Pnquo.net]
>>766
ま た 文 盲 か
>(x, y, zの解放が保証される、
と書いてあるわけだが?
しかしだからといっても普通の人はtryブロック内をチェックするだろ、という主張

788 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:55:59.64 ID:GCto648C.net]
>>768
初心者はおとなしく教科書の質問だけしてろよ
何かを知っているふりをするのをやめろ

789 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:05:08.97 ID:0k8Pnquo.net]
>>769
質問ですが例外安全の教科書として藻前は何を読んだことがあるのでぃすか?

790 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:13:47.58 ID:kO478Zp/.net]
> 例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
どこの主張を言ってるのか知らんけどどう見てもお前の方が「文盲」なわけだがw

791 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:27:40.98 ID:DhnN+uGO.net]
>>763
RAII を使わず明示的な catch でリソース解放しているコードを見て、一般的な C++ プログラマは「危険」だと見るのでは?
その例だと「fgets()とかのコード」内の return などで fp がリークする可能性があるわけで。

792 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:31:29.32 ID:xpWbVnlK.net]
誰が「例外安全なら大丈夫」と言っているの?レス番は?

793 名前:デフォルトの名無しさん [2021/10/20(水) 09:12:35.95 ID:OEiI06HQ.net]
Kuso.KENTA.

794 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 09:21:20.26 ID:glY3n63N.net]
いつになっても
do {
} while(0);
でbreakをgoto代わりに使うしかないのか



795 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 09:23:08.99 ID:NMVwWGr0.net]
>>763
めまいが

796 名前:キるほどのひでえコード
やめてくれバカがうつる
[]
[ここ壊れてます]

797 名前:デフォルトの名無しさん [2021/10/20(水) 09:35:49.31 ID:OEiI06HQ.net]
>>743
観ようとしなければ何も観えない
そんな簡単なことにも気付けない

798 名前:デフォルトの名無しさん [2021/10/20(水) 09:39:48.17 ID:OEiI06HQ.net]
>>757
2GB以上じゃなくて良いけど
そこそこの大きさのファイルで
書き込んでcloseしてる途中に
電源OFFとかになったら例外どころじゃないんだが
最近のOSはちゃんとコンデンサ放電仕切るまでの間に書き込み終了するんだろうか

799 名前:デフォルトの名無しさん [2021/10/20(水) 09:44:46.84 ID:OEiI06HQ.net]
>>760
サンフランシスコ地震で高速道路崩落←直後に「日本では起こり得ない」と言われた
インドネシアの津波で街が吹っ飛ぶ←直後に「日本では起こり得ない」と言われた
チェルノブイリで原発爆発←直後に「日本では起こり得ない」と言われた
武漢でコロナ感染者急増でパニック&パンデミック←直後に「日本では起こり得ない」と言われた
いつも否定したがる人はいるしそれを信じたがるひともいる

800 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:10:43.38 ID:NMVwWGr0.net]
>>778
UPSもアレスタも知らないど素人w

801 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:15:17.23 ID:glY3n63N.net]
ファイル編集中、Ctrl+Sを押下して保存しようとした瞬間に停電になったことがある
再起動後、ファイルは存在しているのに中身は\0で埋められていたよ

802 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:16:33.48 ID:PaxGKk4c.net]
>>778
・UPSぐらい付けろよ
・障害が心配なら多重化しとけ
って話で例外安全とはレイヤーの違う話

803 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:28:28.97 ID:EqJEar1P.net]
>>770
古典だけどExceptionalC++あたりから読み始めるのがいいよ
準拠規格が古いから所々アレだけど大きな考え方を学ぶには十分だろう
感想聞かせてね

804 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:41:33.49 ID:Px+syONf.net]
いつもの



805 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:43:42.24 ID:BFKUlxpT.net]
786以降C++なコードもC++なURLも載せないやつは発言禁止な

806 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 12:28:18.88 ID:vkb7a42p.net]
>>763
try内のコードが例外出さない限りcloseされない

807 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 12:55:58.99 ID:Px+syONf.net]
確かにそうだ
すっかりfinallyのつもりで読んでた
やはりRAIIは正義

808 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:11:06.68 ID:NMVwWGr0.net]
いーやfreadで2G超のファイルはvsでも完全にあつかえる不都合はない
と、自信を持って断言できないゴミが
URL乞食でドヤってるのバカすぎ

809 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:28:11.75 ID:vkb7a42p.net]
C++にもfinally欲しい

810 名前:デフォルトの名無しさん [2021/10/20(水) 13:30:01.90 ID:OEiI06HQ.net]
fseek()/ftell()が32bit用でfseeki64()/ftelli64()の方を使ってないというオチか

811 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:36:27.87 ID:glY3n63N.net]
自信をもって断言したところで、モリカケ・桜を見る会と同じことになるだけだよ
アベノセイダーズは不具合を見つけてくるまで決して許さない

812 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:39:14.76 ID:glY3n63N.net]
>>789
コストラクタでラムダ式をメンバ変数に受け取りデストラクタでそのラムダ式のメンバ変数を実行するクラステンプレートを自作すれば問題解決

813 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:41:35.24 ID:NsIIvpqv.net]
fseekの引数はなぜああしたんだろうね

814 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:46:56.17 ID:glY3n63N.net]
宇宙人がいないことを証明するための労力たるや



815 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:50:04.27 ID:NMVwWGr0.net]
不都合があるという主張であろうと
不都合がないという主張であろうと
自分でコード書けないゴミは引っ込んでろ

816 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:53:43.95 ID:glY3n63N.net]
>>795
そのとおりだな、まずお前が引っ込め

817 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:13:30.21 ID:glY3n63N.net]
再帰呼び出し

我々の宇宙は高度な文明を持つ知的生命体の実験により作られたものであると推測するハーバード大学の科学者 : カラパイア
https://karapaia.com/archives/52306877.html

818 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:38:01.57 ID:NMVwWGr0.net]
>>796
おいURL乞食、おまえに言ってんだよ、おまえに
俺はftellで例示するコード出してんだよ
同類呼ばわりすんな穢らわしい

819 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:47:18.86 ID:BFKUlxpT.net]
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdio>
#include <algorithm>
int main()
{
const char path[] = { "hoge.dat" };
std::vector<char> buffer(1024 * 1024); // 1MB
std::ofstream f(path, std::ios::binary);
for (int gb = 0; gb < 5; ++gb) {
std::fill(buffer.begin(), buffer.end(), static_cast<char>(gb));
for (int i = 0; i < 1024; ++i) f.write(buffer.data(), buffer.size());
}
f.close();
#pragma warning(suppress : 4996)
std::FILE* fp = std::fopen(path, "rb");
for (int i = 0; i < 5 * 1024; ++i) {
if (std::fread(buffer.data(), sizeof(buffer[0]), buffer.size(), fp) < buffer.size()) return 1;
for (auto ch : buffer) if (ch != static_cast<char>(i / 1024)) return 2;
}
std::fclose(fp);
std::cout << static_cast<int>(buffer[buffer.size() - 1]) << std::endl;
return 0;
}
とりあえずVC++2019でx86(32bit)ビルドして実行したら終了コード0の出力4だったのでfread 4GBは超えられてる模様

820 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:12:34.13 ID:glY3n63N.net]
>>799
それは、おま環にすぎないので不具合がないことの証明にはならない
不具合を見つけるのがお前の責務だ
赤木さんのように自○したくなるまで頑張って探せ

821 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:18:25.38 ID:BFKUlxpT.net]
今日は2つのIDで頑張ってるみたいだね

822 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:29:22.63 ID:NMVwWGr0.net]
プログラム技術板の正規メンバに
クソ以外の乞食が何か寝言ぬかしとんな

823 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:34:29.03 ID:glY3n63N.net]
お前らの家の冷蔵庫にエルビス・プレスリーがいないからといって、この世にエルビス・プレスリーがいないことの証明にはならないんだよ
血を吐くまで探せ

824 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:55:06.91 ID:4r95dvH8.net]
不具合あるのを証明したほうがてっとりばやい



825 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:02:32.88 ID:glY3n63N.net]
あぁ?わかって言ってんのか?
泥棒の証拠を泥棒に探させるのがアベガー品質だぞ

826 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:09:49.79 ID:Px+syONf.net]
元々>>637がC++でもfgetsを使う俺は天才などとのたもうて
>>687がFILE*を使うなら例外安全をどう保証するのという話だったのが、
当の>>637>>691でfread/fgets自体が例外を投げる可能性(?)という謎の問題を考え始め
>>710が根拠不明の2GB制限の話を持ち出し

問題があると考えるひとは存在しない2個の問題を同時に考えて混乱し
まあまあ分かってる人はRAIIすればいいじゃん(ってかfstreamでいいじゃん)で話が終わっている

まとめるとこんなところか?

827 名前:デフォルトの名無しさん [2021/10/20(水) 16:17:28.71 ID:glY3n63N.net]
挙証責任をガン無視できる文部科学省元事務次官前川喜平こそ最強
座右の銘は面従腹背、ライフワークは貧困調査

828 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:39:46.06 ID:NMVwWGr0.net]
キチガイ極左は内ゲバで共食いしとれ

829 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 00:40:30.45 ID:ObBh/r ]
[ここ壊れてます]

830 名前:k9.net mailto: >>806
俺はcの標準ライブラリ使うならosの関数使えって言ってた人でアンカの中には登場しない人だけど
「根拠不明の2GB制限」についてはlarge file問題というのが昔あった
https://en.wikipedia.org/wiki/Large-file_support
LinuxなどUnix系が64bit環境にほぼ移行した現在その問題はレアケースだとは思うけど
32bitアプリが割と残っているWindowsだと実際のところどうなのか分からない
でもfreadくらいは出来そうだと考えわざわざコード書いただけ(>>799)
ちなみにLinuxでもdebian系のantiX 19.4 32bit環境では#define _FILE_OFFSET_BITS 64がないとfopenがNULLを返していた
[]
[ここ壊れてます]

831 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 00:51:53.61 ID:l0SlZ35R.net]
話の肝は「私が間違ってました。ごめんなさい」と素直に言えるかどうかなわけで
小室文書みたいな屁理屈の羅列はいらねンだわ

832 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 01:06:38.58 ID:5bux1k1I.net]
>>807
NHK は メード イン ジャパン とか オーダー メード とか表記するのに
メイド 喫茶は なぜ メイド 表記なのですか?

833 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 01:19:29.04 ID:ObBh/rk9.net]
ちなみに>>809の「cの標準ライブラリ使うならosの関数」という意味で以前実験した結果も貼っとく
read, fread, std::ifstream::readの比較
https://ideone.com/H2jc7B
systemdのユーザーごとのRAMディスクを使っているのでそれがある環境でだけ動作する
ubuntu 20.04 64bit環境で実行した結果だと↓
$ g++ -O2 test.cpp -o test
$ ./test
227
267
225
$

834 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 03:46:14.13 ID:Y6x8PTxQ.net]
>>811
前者がmadeで後者がmaidだからじゃね?



835 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 07:45:14.90 ID:5PpYpVBN.net]
以前はメードだったと思うけどね

836 名前:デフォルトの名無しさん [2021/10/21(木) 11:19:37.65 ID:l0SlZ35R.net]
ババ抜きはOld maidの日本語訳だよ
セクシズムやエイジズムはポリコレの立場から見てどうだろうね

837 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 12:39:37.82 ID:u1ltZUWw.net]
regexで\dを使いたい場合はどうやるん?

838 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 14:10:28.52 ID:ObBh/rk9.net]
https://cpprefjp.github.io/reference/regex/basic_regex.html

839 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 17:33:55.95 ID:MfhbDLcG.net]
>>812
その比較でなんで fread だけ遅いんだ?と思ってコード見たら fread じゃなくて fgets になってた。
あと read_cpp_standard() の if (std::cin.fail()) もたぶん f.fail() の間違い。

840 名前:デフォルトの名無しさん [2021/10/21(木) 18:24:19.20 ID:/1ln80gU.net]
>>815
フェミが言葉狩りのネタにしないのは何故

841 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 18:42:48.64 ID:7ERuyWg6.net]
言葉狩りなんてないから

842 名前:デフォルトの名無しさん [2021/10/21(木) 18:56:39.47 ID:ObBh/rk9.net]
>>818
thx
>>812のコードは脳内破棄してくれ
指摘された部分を修正した
https://ideone.com/DoI3ww

同環境での測定結果が↓
214
213
214

freadだとバッファリングされるからその分遅いのかと勝手に思ってたらそんなところから間違ってたとはすまんw

843 名前:デフォルトの名無しさん [2021/10/22(金) 00:41:05.61 ID:bIdSm1HR.net]
BB抜きが有ってGG抜きが無いのは差別

844 名前:デフォルトの名無しさん [2021/10/22(金) 00:43:55.21 ID:bIdSm1HR.net]
>>821
fread最強でFA



845 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 01:17:58.50 ID:JLUkeFzw.net]
freadのバイナリな
DMA効くのは
テキストはゴミ

846 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 02:55:23.69 ID:ugOmuUc2.net]
>>822
ジジ抜きもあるよ。
ジジ抜きはジョーカーを使わない。
適当な札を一枚抜いておいて組にならない札を最後まで持ってた奴が負け。
どれが負け札なのか最後までわからないというのがゲームの面白い部分。

ちなみに日本語でジジ抜きと呼ばれているゲームこそが Old maid (行き遅れ、お局様) の本来のルールで、
ペア (結婚相手) がないことを Old maid に喩えた命名になっている。

847 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 05:43:15.83 ID:I4IH0MDY.net]
C++20ちょっと書き始めたらvscodeのインテリセンスが何でもないところにエラーの波線出しまくってくる

848 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 07:07:31.23 ID:viI1I/mh.net]
DMAか、懐かしい

849 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 12:50:15.03 ID:xpSH/+fs.net]
>>826
どの環境でそうなる?

850 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 13:37:10.17 ID:I4IH0MDY.net]
>>828
OS: Windows 8.1 (64 bit)
コンパイラ: MinGW GCC 11.1.0

文句を言ってくる拡張機能は多分普通の"Microsoft C/C++ 拡張機能"でコードの例としては
https://wandbox.org/permlink/Fcqjvfqt8rWVqren
こんな感じ

エラーは
operator<=>: 戻り値の型だけで識別される関数はオーバーロードできません
requires(1個目): こちらでは requires 句は許可されていません (テンプレート関数ではありません)
vec: エイリアス テンプレート "vec" の引数リストがありません
v: ';' が必要です
という感じ

まあエイリアスのやつはC++17でも言えるけど

851 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:23:13.68 ID:Q/4+pM2R.net]
Pythonのリストのように不定型の配列を作るにはどうすればいいですか?

vector<int> a;
vector<double> b;
vector<vector<any>> hoge;
hoge.emplace_back(a);
hoge.emplace_back(b);

みたいなことをしたいですが、エラーになりました。
最終目的は、
void f(vector<vector<any>>, vector<vector<any>>)
のような不定型配列を複数引数に取る関数を作りたいです。

852 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:45:34.05 ID:vgFDGRgE.net]
std::variantつかうとか

853 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 01:05:44.90 ID:UQ/XjfNb.net]
>>830
出来るといえば出来るんだが、動的型っぽいことを C++ でやろうとすると煩雑だよ。
std::any は何でも格納できるが使うときには結局は元の型として取りださないといけない。
格納することが出来たとして、その後にどういう風に使うのかによってデザインの仕方がかわってくる。

854 名前:ハノン mailto:sage [2021/10/23(土) 01:33:33.73 ID:0KDU0Kot.net]
>>830
C++17以降、へえ、こんなこともできるんだ… https://cpprefjp.github.io/reference/variant/variant.html
https://ideone.com/G8IPFR
>>831
ありがとうございます!



855 名前:ハノン mailto:sage [2021/10/23(土) 01:34:50.09 ID:0KDU0Kot.net]
>>832
うん、実用に供するまでには結構大変そう、使い道がわからん…

856 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 01:57:47.58 ID:UQ/XjfNb.net]
>>834
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。

根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。

857 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 08:10:22.62 ID:LycCK1PV.net]
void*よりはちょっとマシって程度の感覚だな

858 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 10:04:52.59 ID:rMqegMI3.net]
>>832
その後の使い方は、基本的には
全要素をany_castでstringにして使うつもりです。
不定型可変長のデータを受け取ってcsvファイル出力に使いたい感じです。

859 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 10:05:50.17 ID:bwy1yWHL.net]
void*「むかしはあんなに愛してくれたのに…」

860 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 11:08:12.01 ID:FGy8rv7m.net]
>>830
any使うんだったら、
vector<vector<any>> hoge;
じゃなくて
vector<any> hoge;
じゃない?

861 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 11:40:12.00 ID:KcnUiVki.net]
>>835
>>833じゃないけど>>833のdump()を例えば
template<class... Args>
void dump(const std::variant<Args...>& e) {
std::visit([](const auto& x){
std::cout << " " << x << std::endl;
}, e);
}
template<class V>
void dump(const std::vector<V>& v) {
for (const auto& e: v) {
dump(e);
}
}
みたいにするんなら
class Dumpable {
virtual void dump() = 0;
};
みたいな抽象クラス作って素直にArgsの各classが継承(実装)した方がいいと思うってこと?

862 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 13:07:50.50 ID:UQ/XjfNb.net]
>>840
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。

型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。

863 名前:デフォルトの名無しさん [2021/10/23(土) 13:12:23.67 ID:quaWTEll.net]
C++はパラメトリック多相が無いからこういうのは面倒だよね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。

conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。

864 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 13:16:46.64 ID:UQ/XjfNb.net]
>>837
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)

最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。



865 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 14:23:02.68 ID:KcnUiVki.net]
>>841
まあそうだよね。ありがとう。

866 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:17:03.78 ID:mo2+vXTQ.net]
>>771-772
以下のような場合についてBarクラスがRAIIであるというだけでどう例外安全にできるのかお考えをお聞かせ願えますか
void foo() {
 {  // 何かのコードブロック (try { } catch { } のtry{ } とかでも良い
   Bar x, y, z;
    (例外を生じる可能性があるコード)
   アプリケーション固有の別スレッドXにイベントなりシグナルを送る
 }
}

>>723
上に書いたようなケースを踏まえてっ例外安全に言及している>>720>>721に対して
理解しいないまま捨て台詞を残して逃走した>>722とか、

867 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:20:03.55 ID:mo2+vXTQ.net]
>>772
コードブロック内のreturnがあるかもしれないんならチェックすれば良いやん?
>>763は普通の人ならチェックするでしょ、という主張

ところが>>722のような例外安全主義者ときては、RAII = 例外安全、で脳がショートしているのや
多分周りも能力に忖度して大した課題を与えていないんだと思う

868 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:40:20.31 ID:i4dOTOfz.net]
上では例外安全にするとかしないとか言っていたような気がしたが少し主張が変わったのかな。

- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない

結論としてはこんな感じだと思うが。

869 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:41:27.07 ID:7jz7Y9vl.net]
チェックして例外出さないと解放されないコード書いたのか…

870 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 09:13:23.68 ID:1SVJ9Wvp.net]
そりゃ例外安全もRAIIも魔法じゃないんだから使えば即安全になるというわけじゃないわな
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ

871 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 09:51:02.52 ID:v4numFpL.net]
>>845
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話

逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?

872 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:24:44.80 ID:P2kmr3bK.net]
そもそもRAIIが例外安全のためっていうイメージ全くないんだけど
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?

873 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:36:38.75 ID:i4dOTOfz.net]
例外が発生するとリソースを片付け損ねる場合があるってのが例外安全を欠く一番よくあるケースだと思うけど。
主目的がどうとかは別として。

874 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:45:51.44 ID:NLtlOSxj.net]
>>845
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう

Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね



875 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:47:45.55 ID:KyFc3YJo.net]
結局コードがないのでまた空中戦になってますね

876 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 11:38:44.49 ID:IQSwOnqn.net]
例外でデストラクタ呼ばないケースなんてあるんですか?
プログラム自体が止まるのは別として

877 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 12:07:45.68 ID:KyFc3YJo.net]
リマインダー>>731

878 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 14:38:53.43 ID:KyFc3YJo.net]
これg++ 9.3だとstd::endlがなぜかconst variant<>と思われてエラーになってるみたいなんだけど、なぜ?

#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}

https://godbolt.org/z/dbodW3xfG

879 名前:ハノン mailto:sage [2021/10/24(日) 15:13:35.43 ID:rOnHPdOM.net]
>>838
「「最初から void * な実体」は作らない」「void (*)(void *, ...) くらいまでがせいぜいだ」というように努めていた私は愛し方が足りなかったのでしょうか?
最近の愛し方:https://mevius.5ch.net/test/read.cgi/tech/1624028577/305

880 名前:はちみつ餃子 mailto:sage [2021/10/24(日) 18:37:46.86 ID:SzIAMYLD.net]
>>857
std::endl は関数テンプレートなので型と比較しようとするとインスタンス化に失敗するというエラーだと思う。
(std::endl を普通に使うときは左辺の型を利用して推論される。)
型を明示して渡せば variant との比較に失敗して通常の改行として解釈してくれる。

#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << static_cast<std::ostream&(*)(std::ostream&)>(std::endl);
return 0;
}

881 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 19:35:48.44 ID:KyFc3YJo.net]
>>859
う〜ん、よく分かりませんね。確かに勝手にendlは[with _CharT = char; _Traits = std::char_traits<char>]なbasic_ostreamを
引数にとって返すと想定しちゃってましたが、その時点でインスタンス化しようとしてエラー出す理由が分からない・・・

例えばテンプレート引数を直指定しても

#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>; // ここが違う
return 0;
}

同様にエラーのままでした。castしたときだけなぜ判定失敗してくれるのかもう少し考えてみます。
ありがとうございました。

882 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 00:43:36.43 ID:dRHq7DJG.net]
>>860
左辺が曖昧だからかもしれない。
左辺の型を std::ostream で固定すれば通る。

#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
std::ostream& operator<<(std::ostream& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>;
return 0;
}

でもこのとき型変数 C は不要だなと思って class C を削るとエラーになるんだよな。
なんだかよくわかんないね。

883 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 02:18:03.94 ID:LmZJdmU+.net]
>>861
度々ありがとうございます。再現確認したところ、確かに余計なテンプレート引数が1つあるだけでこのエラーが出ないみたいですね。
試しに元のコード(>>857)に余計なパラメータを1つ入れるだけでも通りました。

#include <variant>
#include <iostream>
using namespace std;
template<class T, class C, class... Args> // ダミーパラメータT追加
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}

ほんとによく分かりませんね。
castの件は第2引数のvがテンプレート関数でなければ弾けるということのような気がします。
https://onlinegdb.com/ol3BYChIx

884 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 02:19:56.83 ID:LmZJdmU+.net]
最後のコードは右上の設定ボタンから -std=c++17 を追加することで実行できます。



885 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 13:57:01.70 ID:p1HT8A4i.net]
iostreamのシフト演算子オーバーロードは文句を言われてるがrangesのoperator|のオーバーロードはどうなんですかね

886 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 14:01:06.87 ID:dRHq7DJG.net]
感覚的にはまあ順当だろうと思う。
日付やパスで / を使うのに比べればよっぽど……。

887 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 15:38:37.13 ID:x4U5y7kU.net]
組み込みの意味を持たないオーバーロード専用演算子があれば良かったのにな
用意しておかなかったのはC++の初期デザインの失敗だったと思う

888 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 16:09:42.75 ID:SLeimCOK.net]
意味を持たない演算子が意図せず呼ばれてしまうくらいならコンパイルエラーになったほうがマシでは

889 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 17:28:55.78 ID:dRHq7DJG.net]
ところで Haskell で一定の記号の組み合わせは何でも新しい演算子として定義できる仕組みがある。
!#$%&*+./<=>? あたりとその他 Unicode 内いくらかも含めた組み合わせで演算子を作っていい。
優先順位も決められるし左結合か右結合かも決められる。
事実上無制限に違う字面の演算子を作れるんだよ。
<?+> とか #-. とか <<-~ みたいな演算子が実際に使われてるわけ。
こういう極端なのはさすがにあまりうらやましくはないよな……。

>>866
かといって有限の演算子をある程度に多く用意したところで

890 名前:オーバーロードを許すなら
どこかで全然違う意味で使われることもあるのは避けようがないし、
C++ くらいにスッパリと諦めるのもそれはそれで思い切りが良くて良いと思う。
[]
[ここ壊れてます]

891 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 17:51:03.08 ID:s1VnbLSn.net]
演算子ってのはwellknownだからこそ意味があると思うんだけどな
演算子のオーバーロードもその“意味”から大きく逸脱しないことを求めていたと思うし
意味を持たないオーバーロード専用演算子ってのは
プログラマーによって意味が真逆になりかねないから危険だと思う
そんなことするぐらいなら普通に名前を付けて関数定義したほうがマシに思える

892 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 17:56:20.95 ID:5fKOgArh.net]
そこら中訳わかんない記号だらけのソースとか悪夢でしかないなw

893 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 18:04:59.44 ID:LmZJdmU+.net]
>>857の原因判明しました。
同一の問題がstackoverflowで解決されていたのでリンクだけ貼っておきます。
https://stackoverflow.com/questions/52845621/cant-stream-stdendl-with-overloaded-operator-for-stdvariant

上記に従った対策コードは以下のとおりです。
https://godbolt.org/z/8e9o3MnaG

894 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 20:01:58.87 ID:VZsrHh6g.net]
>>866
リザーブの演算子持っとけって言いたいんだろうけどこう言う奴はいくつ持ってても足りねーとか言うからw



895 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 21:34:55.28 ID:3IW01+t9.net]
演算子オーバーロードって自分で書くにはいいけど他人のコードを読むのが地獄だな。

896 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 21:35:04.23 ID:EqTxifVC.net]
while (fread(&x, sizeof(double), 1, fin) > 0) {
fprintf(fout, "%5.4f\n", x);
}

こんな風に書くとコベリティ君がfreadは読み込んだバイト数を返すが使っていませんみたいなこと言い出すんだが
は?使ってますけど?みたいな気持ちしかないんだけど
何を求められてるんだろうか。

897 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:12:19.30 ID:lDQyydUS.net]
>>874
そんなのシノプシスに聞けよ…

898 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:48:54.44 ID:ch+2e+/f.net]
>>870
昔のAPLとかかw

899 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:08:42.05 ID:a/qQal0X.net]
演算子に限らず、ある関数を特定の名前空間の内部だけ使えるように限定できたっけ?
「あるスコープだけこういう使い方」ならまだ混乱も少ないかね。

900 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:14:06.41 ID:FOkaXEb/.net]
ん? それこそが名前空間の可視性制御だろ

901 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:14:48.16 ID:X4knYEql.net]
関数内で構造体を定義し、その中でstatic関数を定義する

902 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:15:27.77 ID:X4knYEql.net]
あ、違った
class内のprivate関数でいいんじゃね

903 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:27:02.14 ID:cqUp+YH+.net]
>>878
名前空間の外にお漏らししないようにできたっけ?
同じ名前空間にクラス定義しなければADLも気にしないでいいのかしらん。

904 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 09:22:33.47 ID:tIXOLnPL.net]
>>881
この手の話?
cpp.aquariuscode.com/adl-firewall



905 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 10:05:37.17 ID:I5hwU/3x.net]
>>874
fprintfはええんか?

906 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 10:21:21.31 ID:g/XkL0k7.net]
niebloidの出番じゃないの?演算子オーバーロードには使えないが

907 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 12:31:52.75 ID:E+rw0Wy/.net]
>>882
そうそう、そんな感じ。

実際には演算子を閉じ込めたい名前空間の中でクラスを定義しなければADLは影響しないけど、もし定義するとしてもこの技法で回避できそうだね。

908 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 12:54:35.40 ID:FaeDWsHu.net]
今日もまた単発IDの曖昧発言onlyですね

909 名前:ハノン mailto:sage [2021/10/31(日) 10:43:09.43 ID:hT9enBIH.net]
テステス

910 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:04:38.20 ID:uZUsIwlp.net]
std::function を引数にとる関数を作ってるんだが、参照で渡すのとコピーで渡すのでどのように動作が変わるかわからない
参照で渡して良いですか

911 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:28:34.89 ID:2TKPTRzu.net]
std::funcて中身は関数ポインタ―でしょ
コピーで済むものを参照で渡す必要はそもそもないんじゃないの
受け取り先で書き換えて返すなら別だけど

912 名前:はちみつ餃子 mailto:sage [2021/11/01(月) 17:29:06.34 ID:w5vOXkrp.net]
>>888
「引数にとる」というのは実引数の型も std::function 型という意味?

913 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:41:35.71 ID:ja4QDiEt.net]
保存目的なら値渡しのほうがよいらしい
https://stackoverflow.com/questions/18365532/should-i-pass-an-stdfunction-by-const-reference

914 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:42:17.47 ID:P2kjdACs.net]
コピーだろー



915 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:54:17.61 ID:uZUsIwlp.net]
>>890
関数を想定しています

916 名前:はちみつ餃子 mailto:sage [2021/11/01(月) 17:58:12.22 ID:w5vOXkrp.net]
>>893
仮引数の側を std::function の参照にしたところで、実引数の側が std::function ではないときは
変換して一時オブジェクトを作ってからその参照をとる形になるんだよ。
これは std::function に限らない一般原則。
どちらにしても新しいオブジェクトを構築するので参照にする意味がない。

917 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 18:35:36.43 ID:XqzqlHR8.net]
クラスのメンバーにstd::functionをいくつか用意しておいて、
条件によりどれかのstd::functionを引数に取るprivateなメンバ関数とかなら参照にする意味はあるかもしれないw

918 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 19:28:38.40 ID:Qg2QcgLf.net]
この流れで質問をば。

std::functionだと単体のR opetator()(Arg...)しか指定できないけど、複数のメソッドを指定できるように拡張するにはどうしたらいいかしらん?

継承じゃなくてtype erasure を使ったgeneral smart pointerとでもいうようなやつが欲しいんだけど、どこかに実装ないかなぁ。

919 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 19:49:46.26 ID:Iw+wFADq.net]
anyの使いどころ?

920 名前:896 mailto:sage [2021/11/01(月) 20:35:42.39 ID:0sJcc+2w.net]
anyだとメソッドを呼び出せないから機能が足りないですな。
メソッド呼び出しできるインターフェイス付きanyみたいな感じ。
用途は「指定したメソッドがあれば継承関係無しでブチ込める親クラスみたいなanyみたいなshared_ptr」だけど。

921 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 20:39:54.69 ID:ja4QDiEt.net]
理解できてないけど普通のテンプレート引数を持つ関数じゃいかんの?

922 名前:896 mailto:sage [2021/11/01(月) 21:35:17.71 ID:0sJcc+2w.net]
Haskellの型タイプというのがイメージに近いか。

具体例をだしてみると、
class A { public: string test1() { return string("A1"); }; string test2() { return string("A2"); }; };
class B { public: string test1() { return string("B1"); }; string test2() { return string("B2"); }; };
vector<generic_ptr<string test()>>c;
c.push_back(make_shared<A>());
c.push_back(make_shared<B>());
c[0]->test1(); // A1
c[1]->test1(); // B1
c[0]->test2(); // A2
c[1]->test2(); // B2
みたいに、anyみたいに雑多なオブジェクトをブチ込むけど、
anyとは違ってそのまま共通メソッドを呼び出せるようにする、
というのが狙いね。

923 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 22:33:44.83 ID:JtJuMIHt.net]
>>900 https://www.google.com/search?q=Boost.TypeErasure

924 名前:896 mailto:sage [2021/11/02(火) 00:28:12.27 ID:F29rpsLU.net]
>901
ありがとう。こういうのもあるのね

……でも BOOST_TYPE_ERASURE_MEMBER を使ったコンセプトがWandboxで上手く動かないなぁ。
もうちょっと試してみるか。



925 名前:デフォルトの名無しさん mailto:sega [2021/11/02(火) 10:51:55.89 ID:7a5iqwfV.net]
std::thread で作られるスレッドって
スタックサイズはデフォルトいくつなん?
変更とかできるん?

926 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 10:59:21.25 ID:oKrr57AH.net]
>>903
スタックなんて概念がないのに制御できるわけがない

927 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 11:48:47.80 ID:LR6fq+wY.net]
linuxならulimit -sかpthread_attr_setstacksizeで設定できる
ただ確保されるのは仮想メモリなので現実的にはその設定あんまり使い所がない
そしてC++とか関係ない

928 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 13:09:21.89 ID:TehqQXLJ.net]
stdよりposixのほうが洗練されてるよな

929 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 17:28:47.39 ID:LR6fq+wY.net]
何いってんの?この人

930 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:04:22.54 ID:TehqQXLJ.net]
意味わかんなくてpthread使ってんなら相当頭悪い

931 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:13:49.36 ID:U4IKz2Wy.net]
むだに喧嘩すんなよ

932 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:28:12.57 ID:LR6fq+wY.net]
比較対象がおかしいんだからしょうがなくね?w

933 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 00:18:59.36 ID:2vTbLoUN.net]
基底クラスに定数持たせるけど値は継承先で決めたい。
例)Carクラスには計算に使うが変更はしない定数 weight hight width があり、それは継承した車種クラス毎に異なる、など。
下記でコンパイル通るようですが、定数増えると見づらく、もっとスマートなやり方あったらご教授願いたく。


class Car
{
protected:
const double weight, height, width;

public:
Car(double w, double h, double wd)
: weight(w)
, height(h)
, width(wd)
{}
};

class CarA : public Car
{
CarA() : Car(1000.0, 1.8, 1,8) {}
};

934 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 00:22:58.93 ID:O1PLiy99.net]
別に普通だと思うけどどの辺が見づらいと思うんだ?



935 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 01:26:19.60 ID:8QrXrM3i.net]
値が const であるだけでなく static であって欲しいという意図なんじゃないかと想像する。

936 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 01:29:07.53 ID:zGuhJhpK.net]
クラステンプレート化すればいいじゃない
template<double W, double H, double WD>

937 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 01:41:20.30 ID:gd3zcTPm.net]
doubleってテンプレート引数OKになったの?

938 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 01:48:57.72 ID:8QrXrM3i.net]
>>915
C++20 で非型テンプレート引数の大幅な緩和があった。

939 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 02:25:46.30 ID:Xs8oV2Az.net]
C++20では普通に使えるかもだけど、引数に名前を付ける風のトリックがあるらしい
https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/

940 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 05:55:16.82 ID:caWVwyr0.net]
>>911
virtual double weight() const = 0;
じゃあかんの?

941 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:25:31.61 ID:8h2e+y9J.net]
>>912
引数が数値ばかりで10個とかあると確かに何を指定してるのかぱっと見わかんなくなりそう
C++なら>>918に一票だけど参照する時に ( ) が要るからこう言うケースだとC#のプロパティが欲しくなる

942 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 07:38:38.22 ID:gd3zcTPm.net]
C++20で指示付き初期化が出来るようなので、もしC++20が使えるなら定数を構造体にまとめたらいいかも

https://cpprefjp.github.io/lang/cpp20/designated_initialization.html

943 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 08:22:45.14 ID:OHT8JXtH.net]
>>911
Builderパターンとか?
面倒だったらDirectorクラスは省略しても問題なさそう。
類型的な車種ごとにBuilderを派生させてデフォルト値を決めといてもいいかと。

944 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 12:38:49.71 ID:gSSLx8YQ.net]
>>919
参照するときに()ていうのは
a=car.weight(); ていうこと?
a=car.weight; と表記したいならoperator=をオーバーロードすればいいかと



945 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 13:46 ]
[ここ壊れてます]

946 名前::37.13 ID:Xs8oV2Az.net mailto: >>920
C++20で使えるのそれそれ。gccでは元々使えるけど...
[]
[ここ壊れてます]

947 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 13:57:04.43 ID:8QrXrM3i.net]
>>923
C (C99 以降) には有るからついでに C++ でも使えるようにするのは gcc 的にはたいした手間でもなかったんだろうと思う。

948 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 14:01:00.76 ID:8QrXrM3i.net]
ところで C の designated initializer では配列要素を指示することも出来るんだけど、 C++20 にはこれは入らなかったんだね。
↓ こういうの。

const char *foo[5] = {
[2]="bar"
};

949 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:04:47.27 ID:XqgFcDRs.net]
c++17以前でも引数を構造体にまとめれば{}で区切って記述できるようになるから多少マシにはなるよね
IntelliSenseが効きにくくなるのが欠点だけど

950 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:10:59.42 ID:TiWO+rcp.net]
>>922
君は何を言っているんだい?

951 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:27:51.72 ID:7LuUsMxr.net]
そのCの記述素晴らしいよね
C++的でないのはわかるがどうせ初期化時でしか使わんのだしとっとと入れるべきだった

952 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 16:10:31.37 ID:gd3zcTPm.net]
>>925 ラムダ式のキャプチャと競合するためと書いてるね

953 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 16:47:32.00 ID:qipzvPRM.net]
https://ideone.com/d05dJ9
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T>
// template <class T, size_t C=MAX_SIZE>
class SizeLimitedAllocator {
public:
typedef T value_type;
using traits = allocator_traits<allocator<T>>;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
// if (n > C) throw bad_alloc();
return traits::allocate(_allocator, n);
}
void deallocate(T *p, size_t n) {
traits::deallocate(_allocator, p, n);
}
private:
allocator<T> _allocator;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}
このコードをコメント側に変更してコンパイルするとこけるんだけど、なんで?

954 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 17:51:19.26 ID:ISiN+sDp.net]
>>928
aggregate限定だね



955 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 17:56:01.13 ID:Mdbpk+F7.net]
>>930
https://en.cppreference.com/w/cpp/named_req/Allocator#cite_note-2
> rebind is only optional (provided by std::allocator_traits) if this allocator is a template of the form SomeAllocator<T, Args>, where Args is zero or more additional template type parameters.

これですかね?
カスタムアロケータ自分で定義したことないのでじゃあどうすればいいかは分かりませんが……

956 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 18:53:11.25 ID:Qwz9shRh.net]
rebind_allocが悪さしてたりして

957 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 19:23:12.01 ID:A2QjBZsT.net]
>>930
SizeLimitedAllocatorの定義にこれ追加すればいいよ
template<typename U>
struct rebind {using other = SizeLimitedAllocator<U,C>;};

958 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 00:05:22.17 ID:dWDs4ee0.net]
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/ptr_traits.h#L62-L69
この辺の定義にある
定数値という型でないものがテンプレート引数に入ったため、__replace_first_argの下側の定義が使われず
上側の定義が使用されtypeも入らず
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L80
でrebindできなくなったことが原因でした。
これを回避するためには、>>934のように

959 名前:
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L51-L57
この下の定義に当てはまるrebind<U>::otherを定義しておく必要があるようです。

定数値でなく型がテンプレート引数に追加された場合は、otherの定義は必要ありませんでした。
[]
[ここ壊れてます]

960 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 17:04:45.91 ID:9a0GsOuO.net]
グーグルテストのASSERTの片辺に期待値をマジックナンバーじゃなくマクロ定数で指定すると赤線引いて来やがるんだけどVSだけ?
ビルドは通るしテストもできるから全く問題ないんだけどうぜー

961 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 20:17:21.11 ID:MFJzciMu.net]
warningの種類ごとにon/offしたくなる

962 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 00:05:50.61 ID:QjSth2/F.net]
大体のコンパイラはそういう#pragma持ってるだろ
MSVCなら#pragma warning
GCCなら#pragma GCC diagnostic

963 名前:デフォルトの名無しさん mailto:sega [2021/11/12(金) 12:50:12.26 ID:DicJ24/v.net]
改行コードとかタブコードとかが含まれた文字列を
\nとか\tとかにエスケープしてくれる関数ってある?

964 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 12:53:25.82 ID:/M/iq88E.net]
速度気にしないなら正規表現で



965 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 13:28:00.04 ID:INEjO2I3.net]
quote?

966 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 14:16:51.83 ID:IjXGHyKg.net]
std::replaceは?
sjisだとまずいかも

967 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 20:51:39.15 ID:4Xte/kSq.net]
文字コード周りはカオスすぎて標準も手に負えず匙投げたからライブラリ使った方がいいよ

968 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:22:09.10 ID:qmhW9zZv.net]
>>939
C/C++の場合、1文字単位での文字列処理が得意なので、自作するのも簡単。
0x09 や 0x0a は、SJISやUtf8などの多バイト文字の中には含まれて無いから、
なおさら。
例えば、std::stringでも、新しい文字列変数dstを作って、srcの文字列
から1バイト単位で読み取って、dstに1文字ずつ末尾追加していけばいい。

969 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:28:15.13 ID:qmhW9zZv.net]
>>944
[具体例]
MFCのCStringなら、以下のようにするだけでよい:

CString src = "元の文字列";
CString dst; // 変換後の文字列を入れる変数。
const char *ptr = (const char *)src; // CString の 0 終端文字列の先頭アドレスを取得するための変換関数を呼び出している。
while ( *ptr != 0 ) {
 if ( *ptr == 0x0a ) {
  dst += "\\n";
 }
 else if ( *ptr == 0x09 ) {
  dst += "\\t";
 }
 else {
  dst += *ptr;
 }
 ptr++;
}

970 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:33:56.40 ID:qmhW9zZv.net]
>>945
[補足]
このプログラムは、1バイトずつ読み取っているが、文字符合は、このままでも、
無修正で ASCIIだけでなく、SJISやUTF8やEUCにも対応している。
後者のような符合では、例えば、SJISの"あ"の文字だと、1文字単位ではなく、
1バイトずつ処理され、2回ループが回るが、問題ない。
UTF8だと3回ループされる。
つまり、このプログラムでは、SJISの1文字は、2文字のように
UTF8の"あ"の文字は、3文字のように処理される。
しかし、それでも結果的には問題ない。
なぜなら、0x0aや0x09は、多バイト文字の中には含まれてないから。

ただし、SJISの場合、\ の文字コードが含まれているので注意が必要ではあるが、
今回は問題ない。

971 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:39:04.51 ID:qmhW9zZv.net]
>>946
[補足2]
char は、C言語が登場した時には、「文字」の意味であったが、
今は少なくとも C言語では文字の意味はほぼなく、1バイト(8BIT)の意味である。
そして、C言語でcharが1バイト(8BIT)で無い処理系は、主流ではないので無視
してよい。
Javaなどでは、charが 必ず16BITであるのとは対照的である。
ただし、Javaもサロゲートペアの文字に対しては、charは文字の一部であって
本当の1文字には対応していない。
※結局、どの言語も、1文字を固定長で扱い続けることは避けている。

972 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 02:30:33.64 ID:sxA0duhG.net]
メモリ確保が多発しそうなプログラムやね

973 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 06:30:48.47 ID:x1CN7sQN.net]
老害が一生懸命考えたんだろw
メモリリークしまくられるよりマシ

974 名前:デフォルトの名無しさん [2021/11/13(土) 07:45:14.90 ID:xg91cK1y.net]
CStringにせよbasic_stringにせよメモリ確保の多発なんて心配しなくていいよ
JavaのStringじゃないんだから



975 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 08:44:09.90 ID:sxA0duhG.net]
こういう時reserveしてなくても問題ないの?
最大容量わかってるやん。

976 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 09:34:35.76 ID:GqP7nzeW.net]
メモリ2倍取るのと再配置とどっちが無駄かはそれこそ環境と目的次第だろ

977 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 11:06:02.43 ID:wYZH/w0f.net]
>>945
CStringA
もしくは _T("\\t")他

978 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 11:44:37.82 ID:wZp5djKL.net]
vectorもそうだけど、倍々にメモリを再配置していくアルゴリズムがそこそこ効率的なので、
たいていの場合はreserveしようがしまいが有意な差は出ないよね

979 名前:デフォルトの名無しさん [2021/11/13(土) 12:34:40.00 ID:GR8tTV2x.net]
>>943
ほんそれ
std::codecvt_utf8_utf16とか黒歴史でしかない

980 名前:デフォルトの名無しさん [2021/11/13(土) 12:36:34.59 ID:GR8tTV2x.net]
>>944-945
良い子は真似をしないように

981 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 12:49:12.18 ID:jQtDYU1M.net]
プログラミングとしてはiso2020使ってた頃と大して変わらんよね
低レベルで吸収してくれんとやってられん

982 名前:デフォルトの名無しさん [2021/11/13(土) 13:24:23.81 ID:xg91cK1y.net]
ファイル読み取りもシステムコール側が独自にバッファリングしていることが多いから
プログラマ側ががんばってバッファリングしても二度手間だったりする

983 名前:ハノン mailto:sage [2021/11/13(土) 15:53:45.28 ID:DyUYxUU0.net]
>>955
utf32<->utf8
utf32<->utf16
で十分だと思っていますが

というか、 utf16 自体が黒歴史…

984 名前:ハノン mailto:sage [2021/11/13(土) 15:54:13.83 ID:DyUYxUU0.net]
>>958
stdio.h をディするのはそこまでだ



985 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 17:16:26.07 ID:kpA91CRo.net]
文字コードなんて事実上iconvが標準だろ
せいぜいicuくらい
他は一部のプラットフォーム固有の関数くらい
制御コードはISO2022でもなければ使わんし、いうてwhite spaceの類は使われてないから気にすんな
真面目にやると文字の境界見つけんのがだるいし、合成文字の扱いも微妙、異常系の仕様も要件次第になるし、Unicodeのバージョンも無限に上がりそうだけどなw
ってわけでC++とか関係ない話だからどうでもいいよ

986 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 18:02:09.89 ID:vJfZgOKN.net]
C++ なら strstream やろ

987 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 18:03:36.59 ID:vJfZgOKN.net]
>>959
utf32<->utf8
utf32<->utf16

どちらも std:: のは黒歴史

988 名前:ハノン mailto:sage [2021/11/13(土) 18:39:04.73 ID:DyUYxUU0.net]
>>963
そうなんですか…
なぜなんですか?

989 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:29:59.64 ID:vJfZgOKN.net]
>>964
知ってるくせに
https://cpprefjp.github.io/reference/codecvt.html
https://cpprefjp.github.io/reference/codecvt/codecvt_utf8.html
https://cpprefjp.github.io/reference/codecvt/codecvt_mode.html
https://cpprefjp.github.io/reference/locale/wstring_convert.html

990 名前:デフォルトの名無しさん [2021/11/13(土) 21:14:20.03 ID:aIrFEHKz.net]
自分はHTML5の仕様に従って変換してます!

991 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 08:24:14.02 ID:gLhea8X6.net]
>>959
結合文字列があるから、結局コードポイントに必ず1文字が対応しているとは限らないし、
何使ってもUnicodeは闇じゃないか。
まあ、UTF32使えばコードポイントがぶっ壊れることは避けられるけれども。

992 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 09:14:46.42 ID:ybz8bu8o.net]
この場合同じコードポイントでの変換なわけだし一文字がどうとか関係ないが。

993 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:38:12.94 ID:G9ajtZXw.net]
>>948
Perl/Ruby/JSなんかで正規表現を使って置換する場合でも、
同じようなアルゴリズムを使ってるはずだから、これが
特に非効率なわけではないし、代わりになるアルゴリズムで
これよりトータルで効率の良いものも恐らく存在しない。

1.例えば、0x0aと0x09の出現回数を最初に数えれば、必要な
 dstのバイト数を見積もることは可能だが、その場合は、
 二回もパースが必要になるし、プログラムも分かりにくくなる。
 二回パースすることによる速度低下も有る。

2.dstのサイズはsrcのサイズの2倍を越えないので、単純に
 dstの内部バッファをsrcのバイト数の2倍として予約しておけば
 メモリ確保は一回で済むが、srcが巨大な時、メモリを圧迫し、
 余り良いアルゴリズムとは言えない。

994 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:52:13.79 ID:G9ajtZXw.net]
>>951
文字列のバッファは、不足すると2倍、2倍、・・・で確保されていくので
確保される回数は、最終的な文字列のバイト数を N としたとき、大体、
log2(N) 回程度となり、バッファがコピーされるトータルのバイト数は、
b = a + a*2 + a*2^2 + a* 2^3 + ... + a* 2^k
k = log2(N) 程度
a = 文字列クラスの内部バッファの初期バイト数。
となり、大体で言えば、2N を越えない。
1 + 2 + 2^2 + 2^3 + ... + 2^k
は 2進数で考えれば、全てのビットが 1 に成っている整数で、
2^{k+1} = 2*2^k = 2*2^{log2(N)} = 2 * N
であることに注意する。

ただし、bの値は大体で書いたので、厳密には少し違うだろう。



995 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:59:39.62 ID:G9ajtZXw.net]
>>970
1 + 2 + 2^2 + 2^3 + ... + 2^k
= Σ_{i=0}^k 2^i
= (1 - 2^{k+1}) / (1 - 2)
= 2^{k+1} - 1
である。途中、等比数列の和の公式:
等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
を用いた。

996 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 11:04:20.53 ID:G9ajtZXw.net]
>>971
誤: 等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
正: 等比数列の和 = 初項 * ( 1 - 公比^項数) / ( 1 - 公比 )

997 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:08:34.21 ID:p964tW2k.net]
俺は数年前業を煮やして自前のstringクラスを作ってしまった(´・ω・`)
・sjis/utf8/utf16/utf32対応で比較・代入などどの組み合わせでも問題なく動く
・どの文字コードでも同じハッシュ値を生成する
・char型がsjisなのかutf8なのかはdefineで決める
・テンプレートベースのformatを用意してprintfを置き換え
みたいな

998 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:57:01.80 ID:hL5WeBkj.net]
>>973
保持するときのエンコードは?

999 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:58:38.01 ID:p964tW2k.net]
>>974
文字コードの種類に1バイト用意して、後はそれぞれの文字コードで直接保存している

1000 名前:デフォルトの名無しさん [2021/11/14(日) 13:30:12.63 ID:mwYTHPjW.net]
えー
コンストラクタで各種文字コードのバイト列を受け取れるようにして内部保持形式はUTF32でよくない?

1001 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:42:53.43 ID:p964tW2k.net]
それだと大きめのテキストファイルを開いたときなどいちいち変換が入って遅くなりそうだから…といっても実際にはどっちが効率良いのかまでは比べてないけど
異なる文字コード同士比較する時なんかはコードポイント単位で読み出して結局utf32ベースで処理するしな…

1002 名前:デフォルトの名無しさん [2021/11/14(日) 13:44:30.36 ID:E00roTgy.net]
>dstのサイズはsrcのサイズの2倍を越えない

しね

1003 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:59:19.66 ID:5aeLrxCA.net]
プログラマーは3種類しかいない
文字コードが分からない一般プログラマー
文字コードを理解したと勘違いしている地雷プログラマー
そして人類が文字コードを理解するのは不可能だと悟った上でなんとか事故が起こらないように心を砕く真の専門家だ

1004 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 14:17:19.40 ID:p964tW2k.net]
>>976
あーあとは、これのstring_viewバージョンがあって、関数のパラメータをconst mystring_view& strみたいに受けると、どんな対応してる文字なら(リテラルや対応してるクラス含めて)なんでも参照として受け付けるから便利なんだよね



1005 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 14:59:21.42 ID:WpZMPVn+.net]
それconst&いるんか?

1006 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 15:13:11.67 ID:p964tW2k.net]
実質的にはほとんどなにも変わらないと思うけど、無駄なコピーが減る場合もあるので付けておくに越したことはないと思う

1007 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 15:45:24.64 ID:p964tW2k.net]
まぁ、でも参照もコストゼロってわけじゃないから、場合によっては遅くなることもあるか…

1008 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 16:54:05.80 ID:tkHjD9h1.net]
const って伝播するから嫌い
付けるのは反対ではないが

1009 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 17:26:15.73 ID:CXUBNW9m.net]
伝播ってどういうこと?

1010 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 17:38:21.62 ID:A4GQ1/1N.net]
参照で受け取るときには const を付けないと右辺値を受け取れないんだよ。

&& にしたら逆に右辺値しか受け取れないし、
テンプレートにするのも面倒くさいし、
const 参照で不都合がないならまずそれを選ぶのが常道になってる。

積極的にそうする必要はなくても手癖でやるよね。

1011 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 17:44:17.95 ID:A4GQ1/1N.net]
>>985
const 無しから const 付きの参照へは暗黙の型変換が許されるがその逆はない。
const 付きにしたらそれがずっと伝わっていくってことだ。

元のオブジェクトが const でないなら const_cast で const を剥がして書き換えるのは一応は有りなはずだが、
かなり行儀が悪いしな。

1012 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 17:59:13.06 ID:CXUBNW9m.net]
スコープ限定のconstを欲するひとがいるとは思わんかった

1013 名前:デフォルトの名無しさん [2021/11/14(日) 18:02:00.71 ID:nLCz7RQY.net]
責任ベースのconstは有り得るのでは?
privateが在るんだから。

1014 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 18:05:38.66 ID:leu9kbhs.net]
というか伝播しなかったら困るのでは?
お行儀悪くconst_castしない前提なら
ある関数の引数がconstだったら、その関数が呼び出す関数もまたconstであるという保証は大切だろうし



1015 名前:デフォルトの名無しさん [2021/11/14(日) 18:45:07.42 ID:nLCz7RQY.net]
もちろんそれは大切ですよ。
伝搬しなかったら意味ないし。

1016 名前:ハノン mailto:sage [2021/11/14(日) 19:45:46.13 ID:5CSGBVhH.net]
K&R2 にも const はありますが全然使わなかったなあ…volatile 同様キワモノだとおもっていました(爆)

1017 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 22:33:34.47 ID:oUoND4t/.net]
C++20からコルーチン入るけどコルーチンの返り値に関数内の変数の参照返すの問題になるかな?

hoge& test(){
hoge tmp;
for(int i=0;i<10;++i){
co_yield tmp;
}
}

//返り値は実際はgeneratorとかになるかもしれない

1018 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 22:35:39.21 ID:PetPaRNq.net]
yeild使えるようになるのか

1019 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 01:03:02.10 ID:tPLK0GqY.net]
viewは値渡しが基本だよ

1020 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 06:05:50.61 ID:Rt8JG1Np.net]
何かのリミッタが外れた感じだね
無差別にぶち込むようになった

1021 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 06:11:48.42 ID:Rt8JG1Np.net]
江添が逃げた理由も察しがつく

1022 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 15:55:33.66 ID:Ux5WoKB6.net]
更新してないよね

1023 名前:デフォルトの名無しさん mailto:hage [2021/11/15(月) 16:41:30.12 ID:i/3H6iLT.net]
hage

1024 名前:デフォルトの名無しさん mailto:pow(10,3); [2021/11/15(月) 16:42:03.92 ID:i/3H6iLT.net]
10^3



1025 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 5時間 44分 33秒

1026 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<300KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef