1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net] 前スレ C++相談室 part156 https://mevius.5ch.net/test/read.cgi/tech/1621389313/
2 名前:デフォルトの名無しさん [2021/08/09(月) 11:24:40.26 ID:M3I2CbwW.net] 前スレの >>997 キューが溢れないようにするのなら スレッドが実行中かどうかを確認するのではなく キューサイズを見るほうが確実じゃないですか?
3 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:43:30.76 ID:GC6B710d.net] >スレッドが実行中か確認したいってどんなときなのかな? たとえばゲームでセーブするとき、 メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す みたいな時かな
4 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:48:24.98 ID:OWI9S7jW.net] >>3 それはセーブするスレッドのほうが開始と終了を通知すればよくない? そうデザインするもんじゃないの? できないときもあるのかもしれんが。
5 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:56:53.44 ID:GC6B710d.net] >>4 もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
6 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:12:57.14 ID:GC6B710d.net] >>4 ,5 あぁ、いやそうじゃないか ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、 ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、 その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽
7 名前:だからw [] [ここ壊れてます]
8 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:17:21.54 ID:qYrd5+ip.net] この「実行中」が実際にタイムスライスが割り当てられている状態を意味しているんであれば OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。 >>4 であればjoinableで十分だろうし。
9 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:25:08.93 ID:DVzh2mox.net] 別スレッド処理の進捗を他スレッドから閲覧するためのパラメータを使っってる時点で、お察し
10 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:40:21.77 ID:S8n0VVLE.net] 前スレ997は色々勘違いしてそうな気がする 普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
11 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:35:16.98 ID:eF2Q2UUf.net] std::condition_variable
12 名前:ハノン mailto:sage [2021/08/09(月) 13:52:46.20 .net] 正直いって pthread の条件変数は私には理解が難しく、私は安易に win32api のクリティカルセッション&シグナルを多用してしまうのです ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
13 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:01:28.39 ID:TRAo/ccI.net] >>2 別に Producer(pushする側)がこれからpushするのを待っている場合、 Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても Producerが待っているのかどうかの情報を得られない なぜなら、まだpushしていないからな
14 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:14:45.62 ID:TRAo/ccI.net] >>9 >pop側はpopしたらその同期メカニズムに対して待ちを解除するだけ そういう実現方法も(pop側が行った待ち解除がキューイングされれば)成立する鴨、と>>997 にちゃんと書いているもーん
15 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:32:36.91 ID:JaaB5Egp.net] >>5 >>4 って新規スレッド1個で全部済むと思うんだけど……
16 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:33:19.09 ID:S8n0VVLE.net] >>13 いや、スレッドの実行状態なんて見てもしゃーないって話 pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん 要するにスレッドの実行状態の変化は排他制御できないから意味がないって話 pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
17 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:34:07.65 ID:aCXIbwxy.net] std::vectorの部分ベクトルの切り出しって絶対O(要素数)の計算量かかりますよね?
18 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:40:14.51 ID:fi8SjIox.net] 「部分ベクトルの切り出し」とは何かを定義せよ。
19 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:47:54.30 ID:eF2Q2UUf.net] こういうの? std::vector<int> a{ 4, 6, 4, 9 }; std::vector<int> b(a.begin() + 1, a.begin() + 2);
20 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:11:52.58 ID:KzU8BZnC.net] 参照できればいいのか、コピーがいるのか、切り出し位置はわかってるのか、検索を伴うのか、 その辺の条件もなしに計算量の議論なんて出来んわ
21 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:11:11.49 ID:6v1cUfUr.net] クラスAの内部にクラスBがある (入れ子クラス) として、B
22 名前:からAのメンバにアクセスするテクってないんですかね? アクセスしたいメンバをstaticにはしたくないです [] [ここ壊れてます]
23 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:20:25.36 ID:GC6B710d.net] >>20 AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
24 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:48:43.56 ID:OWI9S7jW.net] >>20 クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。 B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。 A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。 関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。 よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
25 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:52:51.13 ID:S8n0VVLE.net] >>20 AやBのインスタンスをどう生成してるのよ >>21 の言うようにAへのポインタ持ってたら普通にアクセスするだけでしょ class A { public: int i; class B { public: B(A* a){ … = a->i; } } } … auto b = new A::B(new A());
26 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:59:35.77 ID:eF2Q2UUf.net] >>19 コピーか参照かは1要素あたりの処理量なので コンテナの計算量には関係ない
27 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:00:48.11 ID:hJGoZPOe.net] 絶対レビュー通らないウンココードでよいなら (char*)this + offsetof(A, b)でなんとかならんのか
28 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:33:38.90 ID:GC6B710d.net] class Aをtemplate化して、class BでAを継承すれはメンバにはアクセスできるけど、たぶんそういうことがしないんじゃないんだろうなw コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
29 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:48:31.00 ID:eF2Q2UUf.net] リファレンサを作るときなんか親オブジェクトへのポインタ使うね
30 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:07:17.09 ID:XVy1LhuX.net] >>23 普通にコンポジションで実現できる条件だよな メルプラネットの奴らも同じこと言いそう
31 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 00:55:38.92 ID:rk6SLsdN.net] 親オブジェクトへのポインタをうっかり共有ポインタにすると循環参照の原因になる(小並感)
32 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 03:53:30.08 ID:mPLpHQ1a.net] +=の引数が1のときは++を呼ぶようにする方法ってありますか
33 名前:ハノン mailto:sage [2021/08/10(火) 04:41:55.83 .net] >>30 自分でそう書くのがいいのでは? (n == 1) ? x++ : x += n;
34 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 08:16:11.83 ID:JssHBcjd.net] >>30 遅くなる可能性があるから気にしない。 コンパイル時に解決できるなら++使っても同じだし、実行時に解決するようだと1かどうかの判定が増えて遅くなる。
35 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:11:16.71 ID:OMlKC5pQ.net] TCPIPのソケット通信プログラム作ろうと思っているのですが、 コネクションを維持し続ける場合のデメリットって何がありますか?
36 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:42:43.27 ID:ZRv1Vy3I.net] >>32 後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく
37 名前: +=1 で行われるようになります で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います ありがとうございました [] [ここ壊れてます]
38 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 14:57:46.78 ID:W7aMf5pX.net] マルチスレッドのキューのサンプルをSTLで作りゃったーしたったわ、 https://ideone.com/bS7rqc ↓ここのC#のサンプルプログラムの移植 // https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html フラグの必要性は意味を取り違えていたわサーセン、 しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお フラグで済むのに、
39 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:21:27.23 ID:W7aMf5pX.net] Windowsのイベントオブジェクトと条件変数の違いまとめ https://dev.activebasic.com/egtra/2011/09/19/413/
40 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:28:07.54 ID:W7aMf5pX.net] と思ったがやっぱ当初の意味(Producerが待っているのかどうか)のフラグが無いと、 キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、 巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;; やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない 漏れは天才なのかもしんない、 かもしんない運転、
41 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 18:25:35.80 ID:W7aMf5pX.net] つかその前に、漏れの天才eyesが改造元とした@IT様のサンプルプログラムに スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、 論より証拠: https://ideone.com/NbKdEQ 変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ (マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所 これでConsumerスレッドが終了できなくなる 対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい 天才の判断である
42 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 18:42:35.68 ID:mYAwPqTL.net] >>34 すみません。この件なんですが、 void operator += (int n){ if(n == 1){ // ここ }else{ …… } } 「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか ++の中身をコピペしても良いのですが、 this -> ++ みたいなノリで呼び出せた方が都合が良いです
43 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:06:35.71 ID:W7aMf5pX.net] というわけで最終的な版を貼る、 https://ideone.com/G3XeAg ProduceとConsumerそれぞれに対する起床条件を分離すた、 日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15 でも 100行足らずのソースコードなら読めるんじゃないの 知らんけど
44 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:11:32.09 ID:cMFKuo8t.net] >>39 ++(*this); または this->operator++();
45 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:24:28.15 ID:mYAwPqTL.net] >>41 ありがとうございます 前置/後置の別が自分
46 名前:フ中でよく付いていませんが、教えていただいたことに基づいて調べてみます [] [ここ壊れてます]
47 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:37:16.72 ID:Lbev+Y0v.net] >>40 で、そこで取れると良い「スレッドの実行状態」って結局何なん?
48 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 20:32:27.09 ID:W7aMf5pX.net] 「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や とれると良い、ではなく取ることが必須や なぜなら、WIN32APIのイベントは1回だけキューイングされるので投げたら投げっぱなしでもそのうち 受け取ってもらえるが、(pthread系統のしくみである)状態変数はそうではなく、 起床信号を投げつける前に相手が信号をキャッチ可能なのか(待ちに入っているのか)知る必要がある なお、イベントのキューイングの有無によって話が変わる旨はすでに書いたある(>>997 上記のことを書いてあるというのに理解もせずにしつこく同じことを繰り返し言ってきたのが>>15
49 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 21:01:08.35 ID:Lbev+Y0v.net] >「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や それって具体的にどういうものを想定しているんだろう。 もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
50 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:11:54.85 ID:W7aMf5pX.net] なんか元にしたコードにまだ問題があった気配orz MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、 対策版は多分これ↓で良いんジャマイカ…… https://ideone.com/at7ef9 (何が起きていて、どうしてこれで対策なのかはコメント参照、 >>45 >>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や >それって具体的にどういうものを想定しているんだろう。 今回のサンプルコードでは具体的にはありません(キリ しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない というのはあるが、>>35 に書いた通りフラグ以外の方法でも同じ判定を行える 言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、 天才なので大目に見てホスイ、
51 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:25:26.70 ID:W7aMf5pX.net] でもまあコメントを読んでいただければ、pthread系のしくみだと 起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う 今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
52 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:47:59.90 ID:C0wcAbjz.net] すみません。 自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか? 他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
53 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:06:02.90 ID:OOQ3UOoB.net] >>48 未初期化変数があって無効なアドレスにアクセスしたとかじゃね 確実なことを言うためには例外コードが知りたい あと問題の箇所のソースコードも
54 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:24:57.75 ID:C0wcAbjz.net] ソースはすみません、ちょっと出せないです エラーコードは0xc0000005でしま
55 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:30:51.53 ID:OOQ3UOoB.net] はいメモリアクセス違反ですね デバッガでがんばって調べてね
56 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:32:41.60 ID:C0wcAbjz.net] あざす
57 名前:デフォルトの名無しさん [2021/08/10(火) 23:34:52.75 ID:5fGESjxl.net] 他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ boost::thread時代にそういった要望もあっただろうし それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった 本質的に必要な機能ではないと
58 名前:判断したんじゃないの? [] [ここ壊れてます]
59 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:44:13.15 ID:rk6SLsdN.net] スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ
60 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:50:54.98 ID:Lbev+Y0v.net] >>47 >起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。 チェックした次の瞬間にwaitする可能性もあるわけなんで。
61 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:24:38.33 ID:qkzYmFIh.net] >>55 >チェックした次の瞬間にwaitする可能性もあるわけなんで。 無い チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから>>55 は全くナンセンスな問題提起 >>53 thread::joinable()があることは書いたもーん
62 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:28:13.23 ID:qkzYmFIh.net] 問題だらけだった@IT様のサンプルコードだけど これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、 さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて 全部動いていたらProducerを待たせる Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな スレッドプールを手で実装するみたいな話になりそう…… でここまでやるならConsumerの状態変数が実体としてコードに現れる
63 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:44:51.77 ID:01hIEDa4.net] 何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、 続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
64 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 08:13:22.18 ID:SyYdmIb8.net] >>56 std::threadから取得する「スレッドの実行状態」の話をしているんだが。 それをmutexでアトミックに操作する???
65 名前:デフォルトの名無しさん [2021/08/11(水) 09:56:36.95 ID:8ERcfmko.net] C++ってiPhoneアプリ作れる?
66 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 12:11:01.26 ID:sOdrsbt7.net] >>60 作れる。QtやUnityで。
67 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 12:13:04.52 ID:sOdrsbt7.net] iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも C++で作れる。 iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。 ただし、それだけだと面倒かも知れない。 そういう場合は、Qtで作れば。
68 名前:デフォルトの名無しさん [2021/08/11(水) 12:52:41.17 ID:MU7UJMps.net] std::vector で insert するとき v.insert(v.begin() + n, hoge); とかすると思いますが このときの n の型って何ですか? int ? unsigned long ? size_t ? あとこういう型を調べるときって vector のどことか iterator のどこを調べると判りますか?
69 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:03:37.14 ID:19rzwYjH.net] 22.3.11 Class Template vector 23.3.11.1 Overview 3 using iterator = implementation-defined; //see 22.2 となっていて、std::vector::iteratorの型は処理系定義だね 現物で調べるならVisual Studioの[F12]が簡単だと思う
70 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:01:06.77 ID:OqxISI0I.net] >>59 ID:W7aMf5pX = ID:qkzYmFIh はスレッドの状態として ・その瞬間の状態: Run/Ready/Wait/... ・終了してるかどうか: thread::joinable で取得できる を混同してる(わざとかどうかは知らんが) あと条件変数とスレッドの状態も混同してるので > チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから なんて意味不明なことを言い出してる これ以上続けるなら>>58 が言うように本人にまとめてもらわないとますますグダグダになるだけだと思う
71 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:15:21.29 ID:EWMgwFeS.net] std::thread使ったことないから自信無くて黙ってた
72 名前:ッど thread::joinable()って別にスレッドが終了したかの判定ではなくない? 他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた fstream::is_open()的な…… [] [ここ壊れてます]
73 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:23:39.88 ID:01hIEDa4.net] >>63 暗黙変換があるから n の型としてはすべての整数型があり得る。 基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。 正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
74 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:56:54.71 ID:OqxISI0I.net] >>66 > thread::joinable()って別にスレッドが終了したかの判定ではなくない? もちろん正確にはスレッド変数がスレッドと関連づいてるかどうかの判定 彼は>>35 辺りでスレッド終了判定と思い込んでるフシが見られるのでそう書いてある
75 名前:デフォルトの名無しさん [2021/08/11(水) 15:08:15.20 ID:MU7UJMps.net] >>67 ありがとうございます >>64 >現物で調べるならVisual Studioの[F12]が簡単だと思う それで判るのは自分で定義した可能性の高い n の型ですよね? 知りたいのは v.begin() + n に要求されている型のことです
76 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:28:09.46 ID:EWMgwFeS.net] >>68 やっぱりそうですよね じゃあ>>65 の2個目の中黒の内容については引用?? 例のコードではjoinableなんか使ってないし>>7 が書いたのを試しもせずに真に受けた感じなのかな
77 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:29:37.31 ID:EWMgwFeS.net] >>69 v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
78 名前:はちみつ餃子 mailto:sage [2021/08/11(水) 15:43:43.66 ID:QcAq7ivU.net] >>69 ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、 その結果の型はイテレータ自身と同じ。 https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
79 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:52:06.26 ID:SyYdmIb8.net] >>66 >thread::joinable()って別にスレッドが終了したかの判定ではなくない? 実際にそのスレッドが実行中か待ちか終了しているかを表しているわけじゃないことはその通り。 で、たぶんそれで十分だからjoinable以上の機能は用意されなかった。 ところがそれが役に立つ場面があるよと言ったのが前スレ>>997 このスレの>>35 と同一人物かどうかは知らんが。
80 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:54:21.05 ID:19rzwYjH.net] >>71 そういうこと
81 名前:デフォルトの名無しさん [2021/08/13(金) 02:38:58.72 ID:tLa9gek2.net] char *mystrcat(char *a, char *b) { // a に b を結合して return a; } みたいな関数を shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b) { // a に b を結合して return a; } みたいな実装にするとき参照カウンタが無限に増える心配はありますか? shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b) の方が良いのでしょうか? あと hoge = mystrcat(NULL, hage); みたいに使用されるときは mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
82 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 02:56:15.88 ID:nopi39s7.net] >>75 shared_ptr<char *> だと、たぶんやりたいことはできてない。 shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。 参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。 shared_ptr の use_count() で取れるから試してみればいい。 問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
83 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 09:51:25.31 ID:BE9FMbqU.net] 個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。 shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
84 名前:ヌういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。 考え方に間違いがあれば指摘するよ。 [] [ここ壊れてます]
85 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 11:40:57.21 ID:UG8FRdqC.net] char *mystrcat(char *a, char *b) { // a に b を結合して return make_shared<char []>(a); } じゃいかんの しらんけど
86 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 14:30:41.36 ID:vEVo7A6C.net] 適当な質問者と適当な回答者 ゴミとゴミをあわせてもゴミはゴミ
87 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 18:27:35.00 ID:tLa9gek2.net] shared_ptr<char []> c(a); return &c[0];
88 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 08:57:21.71 ID:dlgzlAXX.net] namespaceってどのように使うものなんですか? 存在意義がわからない。
89 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 09:56:52.00 ID:2Gpa2MRC.net] >>81 大規模ライブラリを設計するときに重宝する機能 詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ 存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
90 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 10:45:32.18 ID:MjnqNUAd.net] Cにnamespaceが導入されないのは何故なんです?
91 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 10:48:18.77 ID:isR1pnnS.net] >>75 蛇足だけど、理由がなければshared_ptr<char[]>の代わりにshared_ptr<str>にしたほうがいいな。 // a に b を結合して return a がすごく怖い。
92 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:05:20.03 ID:HmVXtcJk.net] >>83 namespace
93 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:07:32.50 ID:HmVXtcJk.net] >>83 namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
94 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:09:29.69 ID:sh47n3w4.net] >>83 マングリングが必要になってしまうから、ってのが大きいだろうな。
95 名前:デフォルトの名無しさん [2021/08/14(土) 11:16:28.29 ID:Wd8wuOU/.net] C++を本格的に学ぼうと思って本を数冊買ったが、言語仕様が複雑な割には知らないとエラー起こすだろ っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
96 名前:はちみつ餃子 mailto:sage [2021/08/14(土) 11:34:44.96 ID:xM4RG8+9.net] 全部知らなくてもわかる部分だけでまあまあ使えるというのが C++ の方針なので 最初から綺麗に書こうと思わないほうがいいと思う。 綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
97 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:41:20.52 ID:HmVXtcJk.net] 構造体の中に関数が書ける、というコアの中のコアな部分の使い方・考え方さえ憶えるというより慣れれば あと他のは追加で憶えればいいってだけ ただし、その追加が今とんでもない量になってて 禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
98 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:47:19.11 ID:fhp8ilcT.net] いいかい学生さん、 他人のコードをな、 他人のコードをいつでも読めるくらいになりなよ。 それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
99 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:15:40.19 ID:MjnqNUAd.net] >>88 エラーが起こったらまだマシだな イクときはだまってイクからな
100 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:23:47.33 ID:sh47n3w4.net] 他人のコードを読んで学ぶのに一番向いてない言語だよなC++は。
101 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:48:08.91 ID:fhp8ilcT.net] オーバーロードが悪いんですよ
102 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 14:19:07.48 ID:EcmTnCEO.net] >>93 perl に比べたらまだマシ
103 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 17:38:14.88 ID:sh47n3w4.net] perlは文法が複雑なだけで、知らない書き方に出会ったらそれを調べれば
104 名前:「い。 C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。 [] [ここ壊れてます]
105 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:45:25.98 ID:lbIZmRLc.net] ぶっちゃけスマートポインターって面倒だよね?
106 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:54:41.75 ID:fhp8ilcT.net] スマポに限らず面倒なテンプレートクラスだらけだよ
107 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:56:25.80 ID:fRH2bKcn.net] ぶっちゃけどんなときに面倒だと感じる?
108 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 19:58:29.67 ID:x6Wgppy9.net] スマートポインタに慣れたら自分で解放しなきゃならないmallocやnewの方がよっぽど面倒
109 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 20:04:27.45 ID:HmVXtcJk.net] >>98 クラステンプレートな
110 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 21:41:33.25 ID:fhp8ilcT.net] autoが便利すぎて反復子の型を明示していたころのC++には戻れそうにない
111 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 22:18:40.56 ID:cML6JT7R.net] 11よりは前は書きたくないね
112 名前:デフォルトの名無しさん [2021/08/15(日) 00:20:00.85 ID:YeWgyy60.net] QZ案外初心者やなw でも言ってることは全面的に賛成 ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
113 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 06:30:24.80 ID:AkVzvB4L.net] autoもそうだが ->戻り型やusingエイリアスもだね typedefには戻れない
114 名前:ハノン mailto:sage [2021/08/15(日) 09:34:41.47 .net] >>103 確かに罰ゲームの一種になるかも‥‥私も少しずつ採り入れていくようになっていますし >>104 もう永遠の初心者だと思っていますので、ならば、初心者の気持ちがわかるコメントでコントリビュートするのもありかと、ふつふつと
115 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 14:37:33.11 ID:Qb5ISoeo.net] >>104 なにこれ? QZ「〜」 名無し「QZ初心者やな。でも賛成」 っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか? あるいははちみつとQZを同一視している? いずれにせよとんでもない皮肉だな笑
116 名前:ハノン mailto:sage [2021/08/15(日) 15:29:20.83 .net] >>107 いちいち反応しなくてもよろしい >>108 つ鏡
117 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 17:48:49.44 ID:pJ9UilRh.net] >>107 それ、以前俺が書いたカキコを勝手にコピペされただけだよ
118 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 17:52:57.61 ID:/OoKg6VD.net] クッソささやかな体面保つためだけの自演も失敗とか本当にみじめないきものだな…
119 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:00:11.34 ID:/ZNLC/hj.net] これか。どういう意図のコピペなんだろうかね。 https://mevius.5ch.net/test/read.cgi/tech/1594615908/595
120 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 18:12:10.32 ID:oR5NZ4bd.net] >>111 ブラウザが記憶してたのを再度投稿してしまったとかそういうしょうもないミスじゃないかな。 JaneStyle のメモ欄で以前のレス内容を貼り付けたりそのまま投稿できたりする機能があるよ。
121 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:15:56.65 ID:pJ9UilRh.net] だから勝手にコピペされたっつってんだろクソ餃子め >>104 は俺じゃないから 3行目を引用したかったのか変な自演したかったのかは知らん
122 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 18:21:10.51 ID:oR5NZ4bd.net] >>113 すまぬ。 本人によるものでなくてもなんらかの意図でメモしてたものを うっかりということは起こりそうなデザインにはなっているので、 意図によるものでなくただのミスじゃねという部分が主旨。
123 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:25:05.27 ID:pJ9UilRh.net] (´・ω・`)そうか
124 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 15:03:34.95 ID:Gh+OcB3l.net] >>107 なんで突然はちみつ?
125 名前:はちみつ餃子 mailto:sage [2021/08/16(月) 15:17:56.99 ID:5E5Krdno.net] >>116 現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。
126 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 19:18:38.03 ID:QgSHgEhC.net] (unsigned) intの数を受けたら何らかの演算をして (unsigned) long longの数を返す、(unsigned) double の数を受けたら何らかの演算をして (unsigned) long double の数を返す、みたいのって逐一オーバーロードを書くしかないですよね? 要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが
127 名前:ハノン mailto:sage [2021/08/16(月) 19:34:40.64 .net] >>118 演算子のオーバーロードにしても関数のオーバーロードにしても、返り値の型を指定することは出来なかったかと 思いつくのは演算前の引数にあてがうキャストのオーバーロードですね
128 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 19:55:44.02 ID:AiYiQHL1.net] 引数をテンプレートにして、引数Tのビット数と整数型かどうかを見て、一段階大きい型を戻り値の型とすることは出来る
129 名前:ハノン mailto:sage [2021/08/16(月) 20:16:27.49 .net] >>120 pls kwsk >>119 普通にコンストラクタのほうがいいですか‥
130 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 21:59:33.60 ID:AiYiQHL1.net] ごめん、めんどい・・というか sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど 結局Tのサイズごとに特殊化するから手間変わらん、てのと 関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね
131 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 23:40:17.97 ID:cwTPPWgm.net] >>118 ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば その通りの動作になりそうなんだけど、何か気に入らないの? 2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)
132 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 00:20:49.88 ID:yPn/BtRt.net] 大きい型というのは一段階大きい型という意味なのかな? 型の大きさは処理系 (アーキテクチャ) 依存だし、 ポータブルに書こうと思ったら思ったよりも面倒な感じ。 主要なアーキテクチャだけ対処できればいいなら 8 → 16 → 32 → 64 の拡張が出来ればいいので用意するパターンはそんなに多くはない。 ちなみに Windows の long double は double と同じ大きさだよ。
133 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 02:08:49.72 ID:rNAqXouz.net] 何種類か関数があるならtraitsを作成するのもありじゃない?
134 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 04:11:58.97 ID:ReVsRUuR.net] 関数読んだら1段階デカい型が返ってくるなんて使う側でも面倒が起きそうだな
135 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 04:23:43.76 ID:TZ94eDdV.net] まぁ、戻り値にも使用できるテンプレートの追加の型を関数内でconstexpr的に定義出来たらいろいろ面白いことが出来そうではあるなw
136 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:14:48.98 ID:9cCAU3aU.net] 話は勝手に変わるけど、 { 1,2,3,4,5 } のような書き方が initializer_list になる場合とならない場合を全て知りたいけど 良く分からないので、誰か教えてくれまいか。
137 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:21:14.80 ID:9cCAU3aU.net] >>128 的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという ことなのか、あるいは、 auto x {・・・}; auto x = {・・・}; auto x = TYPE {・・・}; func({・・・}); のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される のか、どちらなんだろう????
138 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:24:22.53 ID:9cCAU3aU.net] あと、良く分からないのが、 struct CPerson { ・・・ CPerson(int a, int b, int c) {・・・} //(1) }; とあった場合、 1. CPerson a{1,2,3}; 2. CPerson a={1,2,3}; 3. CPerson a=CPerson{1,2,3}; のどれを書いても多分、(1)が呼び出される気がするけど、 struct CPerson { ・・・ CPerson(initializer_list<int> a) {・・・} //(2) }; と書いた場合、1,2,3 はやはり全て(2)が呼び出されるのだろうか?
139 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:38:31.07 ID:z/GAGLjl.net] >>129 > initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される initializer_list を経由しないことはある。 おおざっぱには initializer_list を受け取る文脈では initializer_list だし、 推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、 そうでないときは initializer_list を経由しない。
140 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:48:40.83 ID:z/GAGLjl.net] >>130 優先順位がある。 1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。 initializer_list を受け取るコンストラクタが存在しなければ 三引数のコンストラクタが呼出される。
141 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 16:54:44.67 ID:9cCAU3aU.net] >>132 なるほど。確認だけど、 1. CPerson a{1,2,3}; 2. CPerson a={1,2,3}; 3. CPerson a=CPerson{1,2,3}; 4. CPerson a(1,2,3); 5. CPerson a=CPerson(1,2,3); は、どれも3引数のコンストラクタで受け取ることは可能ということでOk? 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
142 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:08:54.15 ID:z/GAGLjl.net] >>133 (initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、 5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。 (コピーコンストラクタ、またはムーブコンストラクタが起動する。) ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。 そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない といった重要な違いがある。 (initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
143 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:14:28.81 ID:9cCAU3aU.net] >>134 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能?? については?
144 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:19:50.55 ID:z/GAGLjl.net] >>135 それが区別できるだけのルールは既に提示したつもり。
145 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:21:53.70 ID:9cCAU3aU.net] >>136 すまん。もう一度明言してくれるとありがたい。
146 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:27:44.09 ID:td+NCu9W.net] template <int N> void test(std::bitset<N>& arg); int main() { std::bitset<1ull> lvalue; test(lvalue); } これ、Nが推定できないのはなんで?
147 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:28:31.68 ID:td+NCu9W.net] すまん、自己解決 unsigned long long Nが正解だった
148 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:30:02.71 ID:z/GAGLjl.net] >>135 > 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? はい。 可能です。 > 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能?? はい。 不可能です。 ところで >>134 で、オブジェクトを構築した上でコピーするのは 5. と述べたけど 3. もそうやな。
149 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:33:59.90 ID:z/GAGLjl.net] >>138-139 正解は size_t だよ。 size_t が具体的にどの整数型に対応するかは処理系定義なので もちろん unsigned long long と等価なこともあるだろうけど。
150 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:40:36.29 ID:9cCAU3aU.net] >>136 念のため、その「述べた」はずのルールがどの文章だったのか教えてもらえれば ありがたい。
151 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 22:54:32.78 ID:CH0dz2ka.net] vector<long long>を取る関数にvector<int>を渡すと、その引数はvector<long long>にキャストされる で、vector<int>を取る関数にvector<long long>を渡すのはNG この理解は合ってますでしょうか
152 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 23:03:24.64 ID:/B0HDd6y.net] 間違ってる vector<long long>とvector<int>には何の関係もない intとstringに関係がないのと同じくらい関係ない
153 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 11:13:55.26 ID:5K/SmrCp.net] pair<int, int> は pair<long long, long long>にキャストできるけど vectorにそういうコンストラクタはないな
154 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:13:09.91 ID:ssGfr3Zr.net] >>103 VS6.0の頃は地獄だったよ forループの変数は生キノコるわ例外出たら自動変数の破棄全部ぶっ飛ばすわでMSはクソの集大成だと確信していたわ
155 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:42:32.36 ID:5K/SmrCp.net] 例外処理が2系統、数え方によっては3系統あるのがね
156 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 15:19:34.50 ID:Pb4opnB5.net] STOUT を STDOUT に空目してこそプログラマ脳 「ミロ」そっくりの缶ビール 子どもが誤飲し販売禁止に(豪) - Yahoo! JAPAN https://article.yahoo.co.jp/detail/1a7b2e0b9ab108ebf156f22e654f60634c39c88b 子どものみならず大人にも大人気のココア味の麦芽飲料「ミロ」は、世界中で愛されている。このほどオーストラリアの企業が、 ミロにそっくりのパッケージデザインで缶ビールを製造したことにより「子どもが間違えて飲んでしまった」という苦情が届いた。 これにより同製品の広告使用禁止が言い渡されたことを『news.com.au』などが伝えている。 問題の缶ビールは、豪ビクトリア州にある企業「Howler Brewing Company」の「Chocolate Milk Stout」というチョコレート風味の黒ビールだ。 缶のデザインは有名な麦芽飲料「ミロ」を真似たもので、お馴染みの緑色を背景に製品名や販売会社を示す文字の色やフォントまで同じデザインとなっている。 同社はこれまでにも、Instagramや炭酸飲料「スプライト」など認知度の高いロゴデザインを真似た製品を作り出している。
157 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 17:52:50.79 ID:BMARPdQo.net] 関数オブジェクトじゃなくて関数を記述するメリットってなんかある? テンプレートは近々関数オブジェクトの方でも使えるようになるんでしょ?
158 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 19:08:22.19 ID:n19OoAH+.net] >>149 タイプ数が少ない、くらいかね。
159 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 20:12:20.52 ID:BMARPdQo.net] >>150 じゃあそのうち「関数はレガシーな書き方なので関数オブジェクトを使用するようにしましょう」とか言われるようになるの?
160 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:32:59.41 ID:E2GGZp0E.net] >>149 複数の関数から呼ばれる関数どうすんのさ グローバル変数や引数にいちいち入れるの?
161 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:37:37.24 ID:E2GGZp0E.net] >>146 forの変数スコープは回避策あったやん 98年発売なんでもうちょっとどうにか出来たのではとも思うが
162 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:45:38.19 ID:E2GGZp0E.net] あ、すまんラムダじゃなくて関数オブジェクトか 確かにタイプ数くらいしか思いつかんけど テンプレートは既に使えるのでは?関数テンプレートに出来て関数オブジェクトに出来ないテンプレートの使い方あったっけ
163 名前:デフォルトの名無しさん [2021/08/21(土) 10:46:43.63 ID:+K/WXdke.net] >>148 日本でも煙草を真似したデザインのチョコレート菓子があったけど 間違って煙草食った子供が死んだとか裁判になったとか聴かないな おそらくあったんだろうな
164 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 12:15:51.53 ID:t0h3aTQf.net] >>154 実体化の制御かね。 関数テンプレートは使用されない限りエラーにならない。 SFINAEもそうじゃなかったっけ?
165 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 13:42:38.53 ID:E2GGZp0E.net] クラステンプレート内の普通のoperator ()だとそうだね operator ()がテンプレートの場合ならほぼ関数テンプレートと同じ事出来るとは思うけど 文法上、明示的にテンプレート引数指定する際、関数と共通の書き方には出来ないな・・
166 名前:デフォルトの名無しさん [2021/08/21(土) 20:47:50.56 ID:7GAoG1Iq.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 nim-lang.github.io/Nim/manual_experimental.html Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
167 名前:デフォルトの名無しさん [2021/08/21(土) 22:35:53.53 ID:o/sUihIV.net] 質問です。 std::array ary = { 1, 2 }; ↑の{}で初期化すると、 要素数を自動推論できるようにするにはどう実装すればいいんでしょう?
168 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 22:55:48.18 ID:+FOhqLVw.net] 推論補助だと思う https://cpprefjp.github.io/reference/array/array/op_deduction_guide.html
169 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 01:17:33.04 ID:maGRuunL.net] >>155 食ったところで飲みこまずにペッペッて吐き出すだろ
170 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 04:31:26.04 ID:Roj0wExz.net] g++ -std=c++17
171 名前:デフォルトの名無しさん [2021/08/22(日) 12:59:29.57 ID:0Cz6ueFz.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 バージョン1.5.1 nim-lang.github.io/Nim/manual_experimental.html 第二プログラミング言語として Rust はオススメしません Nim をやるのです https://wolfbash.hateblo.jp/entry/2017/07/30/193412 Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
172 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 18:45:30.76 ID:gNvESTNy.net] std::chrono::time_point::time_since_epoch()が返すエポックタイムの原点はいつですか? もし具体的に規定されていないとしても、 ミリ秒パートが0であることは保証されていますか?
173 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:20:25.99 ID:gNvESTNy.net] ある意味自己解決しますたorz https://cpprefjp.github.io/reference/chrono/system_clock.html >C++17 以前の場合、system_clock のエポックがどの時間を指しているかは未規定だが、ほとんどの処理系は UNIX 時間(1970年1月1日0時0分0秒)を指している >C++20 以降の場合、system_clock のエポックは必ず UNIX 時間(1970年1月1日0時0分0秒)を指す しかし(特にC++17以前において)ミリ秒パートが0が保証されているのかどうかがはっきりしませんぬ、
174 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:28:39.82 ID:VeL/IzCV.net] 生年月日をUNIX時間で表現できないオッサンはこのスレにどのくらいいるの?
175 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:27:04.43 ID:gNvESTNy.net] 生年月日ならミリ秒まで言える必要は無いが ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)
176 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 04:13:32.16 ID:F733kpwr.net] 1970年以前生まれの50代以上のオッサン
177 名前:デフォルトの名無しさん [2021/08/23(月) 16:50:49.24 ID:Rrt4HCug.net] B.C. A.D. B.E.
178 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:05:26.78 ID:xWEF4I0D.net] B.E.って何ですか UCとSEとかRCとかじゃないの
179 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:52:48.51 ID:xWEF4I0D.net] ていうかsystem_clockはC++17以前からtime_tと相互変換できるのに(system_clock::from_time_t()、system_clock::to_time_t())、 エポックがどの時間を指しているかは未規定とかおかしくね↑?
180 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:20:43.35 ID:AuTnTHJo.net] 別におかしくない 変換時にエポックの差の分ずらせばいいだけだろ
181 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:31:13.03 ID:sPTJEjpv.net] そんなことよりなんでtime_tは符号なしなん? 64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに
182 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 00:03:00.26 ID:24MephMZ.net] 符号なし使うのは総じてセンスないよね
183 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:17:43.25 ID:NEyNeI43.net] 符号付き整数はwrap aroundしたときの挙動が処理系依存か何かだったはず…… ハードウェア例外を生じるやつがあるらしい
184 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:52:57.66 ID:4Ohx7QuI.net] >>173 純粋にプログラミングスキルの話と受け取った>>167 に謝れ
185 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:21:39.19 ID:NErefsYh.net] >>175 オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。
186 名前:デフォルトの名無しさん [2021/08/24(火) 15:27:02.85 ID:WZMj7UxV.net] >>167 ntp使え
187 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:48:36.53 ID:DexxKsi1.net] >>174 time_tを符号なしにしたやつはアフォだと思うが それをもって符号なしを使うやつ全員が例外なくアフォというのは 早まった一般化という誤謬だ
188 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:08:27.39 ID:OPjw/0cg.net] >>160 なるほど!ありがとうございます
189 名前:167 mailto:sage [2021/08/25(水) 00:50:22.37 ID:MXKFEwSS.net] そういやーまだご存命の方もいらっしゃるんでしたね >>179 符号付きにしたら2038年問題が2004年問題になってた 人類は間に合わなかった
190 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:34:23.44 ID:VHSVWUHA.net] 30年も猶予があったのにな
191 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:43:26.33 ID:M5WZn8fZ.net] ヒトラー「2036年、人類と云われる者は居なくなっている」
192 名前:デフォルトの名無しさん [2021/08/26(木) 16:49:35.75 ID:WPRv8+9f.net] 関東大震災だって100年も猶予があっても何もしない國ですし
193 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:09:02.54 ID:xnTAPql6.net] 色々やってるぞ 庶民を助ける政策をやってないだけで
194 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:50:19.96 ID:BFKMFKNN.net] https://twitter.com/cpp_akira/status/1430779310885859330 最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。 Rustへの言及とか一文字も書いて
195 名前:ネいのに。 普及活動だと思うけど、さすがに嫌がらせチックに見える。 https://twitter.com/moriyoshit/status/1430795812552863744 C++の件に限らず、旧来からある言語の長所短所を理解せずに、 表面的に新言語を推す発言を見ると、 果たして当人は新しい言語の方も理解できているのだろうか、 という疑念をもってしまう... (deleted an unsolicited ad) [] [ここ壊れてます]
196 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 19:27:10.45 ID:wbifwX7a.net] >>186 Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。 スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能 new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止) といったメモリ周りの制約強化は欲しい。
197 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:03:18.97 ID:dCOU+NEa.net] Rustを使って欲しいなら、そう言えばいいのに 人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ コミュ障にも程がある
198 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:35:03.00 ID:iJLWqDs6.net] インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?
199 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:49:01.71 ID:Ovc44+68.net] ライブラリ使うときのロードの手間がなくなるからね
200 名前:はちみつ餃子 mailto:sage [2021/08/28(土) 23:41:54.59 ID:V8MBAFoh.net] スタティックリンクにすると最適化の情報が増えるというのもあると思う。 C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、 コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した 最適化が出来なかった。 今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化 させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
201 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:13:16.45 ID:h29TClHM.net] std::threadってスタックサイズを指定できないってマジ? 仮想メモリを使えない組み込み用途だとどうすんじゃ……
202 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:20:14.34 ID:kSqJuAzn.net] native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ
203 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:28:41.66 ID:h29TClHM.net] Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな 組み込み用OSがあったらどうすんじゃ……
204 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:46:08.60 ID:h29TClHM.net] とわいえμITRONのcre_tsk()は >cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー >ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。 >スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って >いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし >ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー >チンでの初期スタックポインタ値で決まります。 みたいなことが書いてある C/C++界隈はみんな頭おかしい……
205 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:55:46.65 ID:h29TClHM.net] ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は 第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;; なんでstd::threadではできないんじゃ……
206 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:18:20.52 ID:vSvS+48a.net] コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね? NGしたいからトリップつけてください
207 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:25:04.60 ID:x8xWTwL3.net] >>192 標準じゃ無理でしょ 全てのスレッドを変えたいならリンカのオプションとかで指摘できる環境もあるけど boost::thread使って boost::thread::thread_attribute::set_stack_size() で設定するがよろし >>193 native_handle()関数でハンドル取れると言う事はスレッド開始してる 開始済みスレッドのスタックサイズを変えられる環境って聞いたことない
208 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:30:52.45 ID:AWkeWwKB.net] >>196 ほんと組み込み屋は馬鹿だな
209 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:52:45.64 ID:h29TClHM.net] >>197 完璧な理解をサンプルコード付きで示したやろうが;;; 論点はなんでムーブに置き換えられるケース(明示的にstd::move()したら明らかに効率的なコードになる において最適化でムーブにならないのか?なのだが高度すぎるのか文盲か故に>>197 が付いてこれていないだけ >>197 はブーメラン
210 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:54:56.72 ID:h29TClHM.net] もっとも天才の漏れは答えにたどりついたがな ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、 置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
211 名前:デフォルトの名無しさん [2021/08/30(月) 14:34:41.72 ID:jKIf8Vzq.net] 天才のインフレ
212 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 16:43:13.53 ID:Uxp79PtR.net] Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす ってのではだめな理由ある?
213 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:16:57.41 ID:dG55Jwur.net] >>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。
214 名前:はちみつ餃子 mailto:sage [2021/09/01(水) 23:35:30.93 ID:3mB0e8fG.net] >>203 ものによって賢さの程度が違うから一概には言えないけど 基本的にはサニタイザは実際に起こった問題を検出するものなので 入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、 言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも 検出できないかもしれない。 問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、 Rust のライフタイムチェックほど網羅的ではない。
215 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 05:18:49.53 ID:90/tsZBA.net] 一言でまとめると動的試験てことだな
216 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:16:16.79 ID:6YHhlfzl.net] MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して そこを付いてくるから、普段の実行テストでは一度も発見できなかった メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを 付くことはないから、そのようなホールはあまり関係ないと思う。 テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト することで大部分のバグが無い状態で開発していこうとする考え方。 それでもほとんどのメモリーバグは無い状態になっている。 メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。 昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが ある行とそれが発覚した時期とがずれていることがあるから。 デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、 それはなくなるはず。 Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが 一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは それがないので、隠れたバグは隠れたままになっていることが多くて、 テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
217 名前:デフォルトの名無しさん [2021/09/03(金) 09:22:40.61 ID:6YHhlfzl.net] >>207 例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、 free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を 起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合 が生じた時点で発覚する。 なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと される。 しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を 落としてチェックすれば本当は防げるはず。
218 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:24:49.55 ID:6YHhlfzl.net] >>208 チェックと言っても人間が手で書く必要は無く、コンパイラがチェックコードを 自動生成できるはず。
219 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:00:52.25 ID:yL2Kwy6+.net] 根拠のない決めつけばかりで気持ち悪い。
220 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:16:16.17 ID:lmzB7IZ6.net] >>207 世の中にはテスターという職種の人がいてだな
221 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:46:20.27 ID:yJUEU9nq.net] >>207 任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
222 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:00:44.84 ID:yJUEU9nq.net] Valgrind と言う動的解析ツールを調べて見るといい うちはC++のプログラムは基本これを通すことになってる 商用ならもっといいツールもあるかも知れない そういうのを利用しても充分でないから静的解析するRustが注目されている
223 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:27:43.59 ID:6Xh4x7Us.net] 商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ
224 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:44:23.16 ID:9y+1HwQb.net] コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。
225 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:47:10.63 ID:lmzB7IZ6.net] > メモリ関係のバグなんてありえないと思える lintの副作用がモロに出てるなw
226 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:20:21.54 ID:MvVz2a9W.net] 言うまでもない事だが完璧なメモリチェッカーは存在し得ない 停止問題と同値だからな
227 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:50:45.07 ID:6Xh4x7Us.net] 完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ? 限定的な範囲で正しけりゃ十分だよ
228 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 16:54:40.55 ID:lmzB7IZ6.net] ゴールポストは動かしちゃダメだよ
229 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:38:29.50 ID:6Xh4x7Us.net] 無限遠のゴールを設定するのはアホだべ
230 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:51:18.36 ID:xmwLNRYX.net] スクリプト言語も普通にクラッシュ
231 名前:することあるから [] [ここ壊れてます]
232 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:52:37.20 ID:xmwLNRYX.net] OSのコアダンプ出力とリブートに救われる手のひらの孫悟空
233 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 18:28:35.67 ID:iCLUv6gH.net] rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。 c++の場合はどうなんのかな。
234 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 20:13:28.89 ID:USKNPKWa.net] CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが) 検知レベル上げ過ぎると逆にFalse Positiveも増えるし
235 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 07:59:49.00 ID:kFVsNuY8.net] 無限遠のゴールポストを動かすって こいつ文系か?
236 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 08:08:40.61 ID:N/QuNfWR.net] まあ見つからないのは間違いなく書き方が悪いよな
237 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:04:52.86 ID:7+pvijvQ.net] ∞の概念が理解できるならそいつはもう文系ではあるまい
238 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:11:19.50 ID:ICKB9ww0.net] ε-N論法
239 名前:デフォルトの名無しさん [2021/09/04(土) 22:28:42.31 ID:mLTAxmCN.net] 超久しぶりにC++の参考書 買った。 いまってC++20までいってるんでしょ? 時代遅れもいいところだから勉強しようと思ってw ただ読む気がおきない。 「pythonでいいか」って思いが・・・ww
240 名前:ハノン mailto:sage [2021/09/04(土) 23:52:57.58 .net] >>223 https://tabesugi.net/memo/2009/1a.html C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
241 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:05:05.82 ID:yIsM5ONG.net] バカが使いこなせる言語ではないからな
242 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:27:52.33 ID:eMsTCIh+.net] linusに言われると返す言葉もないが、その後の文脈にある 『もし C++ で書かれた VCS が欲しいのなら、Monotone を見てみるといい。 ほんとに。連中は「本物のデータベース」を使っているよ。 「素敵なオブジェクト指向ライブラリ」も使ってる。「ナイスな C++ の抽象化」も 使ってる。そして率直なことろ、一部の情報系の人間が喜びそうな これらすべての設計上の決定のために、できてきた結果はゲロゲロで 保守不可能なカオスだ。 でもあんたはきっと git よりも気に入るだろう。保証するよ。』 な感じでC++を気に入って、夢を見ていたいんだろうね。
243 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:53:47.56 ID:66hkUr5p.net] 「オレはC++を使いこなせている」と思い込む素人を生温かく見守るスレはここですね
244 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 01:42:41.34 ID:eMsTCIh+.net] >>223 https://lkml.org/lkml/2021/4/14/1099 コレのことだと思うけど、どういうケースを想定しているの?
245 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 06:00:11.76 ID:fsFc+8nQ.net] 昔、バカでも使える言語でプログラマ人口増やしましょうてなことやってたな BASICじゃないぞ、あれは初心者用で、バカ用じゃない 計算を数式で書くのは理系だけだから 英文で書けるようにして文系でも使えるようにしようという試みがあった で、狙いどおり本当にバカプログラマを量産できた それでいいことあったか? C++はアレの逆をいっているわけだ
246 名前:デフォルトの名無しさん [2021/09/05(日) 06:45:24.37 ID:ClPlKiJv.net] Qtを使ってるから、C++一択だな。
247 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:24:02.01 ID:cBh+EO/A.net] namespaceと多態性はCだけではやりにくい
248 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:47:17.91 ID:0Cj96kG7.net] 静的なディスパッチの充実がCに必要なのではないか
249 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:17:57.22 ID:cBh+EO/A.net] >>234 Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで パニくられると手の打ちようがないから困るという話なんじゃないの(適当 OSはリソース管理を放り投げて停止することは許されないから 伝統的なやり方では起動時に非常用のメモリブロックをアロケートしておいて メモリが枯渇したら非常用のメモリブロックを使うみたいな手段がとられる(と思う がパニックされたらそこまで行きつかない ※ 個人の感想です
250 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:38:48.42 ID:eMsTCIh+.net] >>239 具体的に何かのケースを想定して言ってるわけじゃないのか。 ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。 rustでもそんな感じで処理系次第って話だと思う。
251 名前:デフォルトの名無しさん [2021/09/05(日) 14:44:00.68 ID:LgQhIBwq.net] >>230 馬鹿除けのために C++ じゃなくてあえて C を使うのは良いね https://www.youtube.com/watch?v=TkyGdUg_XlA
252 名前:ハノン mailto:sage [2021/09/05(日) 17:28:18.83 .net] >>241 >>230 の類の話は昔からいわれていたもので、これも有名ですね www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html インタビューア(以下「I」): あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。 Stroustrup(以下「S」): 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。 大学も C 言語を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ 。 S: ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。 実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3/60とかでないと動かなかった。 ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。 今でさえ、生の X Window コードを書く人間なんていない。正気を保つには Motif を使うしかないんだ。 S: もうかなり時間がたったしね、C++ が時間の無駄だということにはほとんどの人が気がついたとは思うけど、でも当初予想していたよりはずいぶん時間がかかったな。 I: 具体的に何をどうやったのかな。 S: 最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、オブジェクト指向プログラミングが非直感的で、非論理的で、非効率なことくらいはわかるよね。 I: え? S: それに「コードの再利用性」ときたら…。どこかの会社がコードを再利用したなんて話を聞いたことがある? I: うん、でも C++ は基本的にはしっかりした言語だと思う。 S: それ、本気で信じてるね。実際の C++ プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。 たとえば演算子のオーバーロードがそうだ。たいていの場合、プロジェクトの終わり頃にはほとんどのモジュールで演算子をオーバーロードしている。 プログラマの連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの演算子の持つ意味が、モジュールによってまったく異なることになる。 モジュールの数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? データ隠蔽もあるね。モジュール間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。 「Synergistic」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
253 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 17:47:40.38 ID:eWmYSwWp.net] >>242 とっくに否定済みのデマを貼るな www.stroustrup.com/bs_faq.html#IEEE
254 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:05:24.16 ID:Lkm6/1Sl.net] https://ideone.com/fHH1N4 これが、シングルトンとして抜けている理由を教えて下し亜。 コードのストックにするために書いたのですが、そもそもシングルトンってなんでしたっけ?
255 名前:ハノン mailto:sage [2021/09/05(日) 18:06:53.16 .net] >>243 誰が書いたかなどどうでもよく、その内容についてはどう思いますか?
256 名前:はちみつ餃子 mailto:sage [2021/09/05(日) 18:10:26.36 ID:vh6AiUnJ.net] >>244 関数テンプレートが結果的に引数の数が違う関数として展開される。 引数の数の違いが結果の違い。
257 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:23:29.28 ID:cBh+EO/A.net] >static std::shared_ptr<T> O = std::make_shared<T>(A...); の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき ちんと排他してくれるんでした っけ また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切) であることを気体していいんでしたっけ…… つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……
258 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:24:18.83 ID:yIsM5ONG.net] >>242 おまえホント頭悪いな
259 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:27:31.03 ID:cBh+EO/A.net] みたいな配慮がシングルトンにしたとたんに必要になる メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
260 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:28:54.12 ID:0Cj96kG7.net] >>247 呼ばれたところで最後の奴が勝てば問題ないのでは
261 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:47:53.68 ID:cBh+EO/A.net] >>250 ある >static std::shared_ptr<T> O = std::make_shared<T>(A...); 全体が排他されないとしたら、Oの生成関数(初期化式「O=」の右辺)が複数回、 それも同期的に繰り返し呼ばれるのではなく、非同期的に再入される形で呼ばれかねない 生成関数の中でリソース確保するとしたら先の呼び出しで確保したリソースの ハンドルがdunglingにならないように配慮が必要になる 非同期的再入ということは、Oが生成→破棄→生成→破棄、にならず、 生成→生成→破棄→破棄になりかねないから、デストラクタをちゃんと書いたらリークしないとか そういう認識で当たったらバグる 問題山積や メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
262 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:50:05.34 ID:nyuo1Vq1.net] >>245 お前の質問なんかどうでもいいからデマを貼るな
263 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:08:04.86 ID:UYU4AxET.net] >>247 https://timsong-cpp.github.io/cppwp/n4861/stmt.dcl#4
264 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:10:36.36 ID:2jP3+tuQ.net] >>246 を踏まえるとこんな感じか 関数テンプレートだけで済ます方法はあるのかな? https://ideone.com/kmIimz
265 名前:ハノン mailto:sage [2021/09/05(日) 21:38:19.52 .net] >>248 はい、頭も性格も悪いと思います、しかし >>242 の中のどういうところが悪いとお考えになったのか教えていただくと嬉しいです!!
266 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:21:15.62 ID:TAzC3d8r.net] >>255 そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を 良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして) 解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを 疑問に思ってないことも頭が悪いと思われる原因の一つ。
267 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:29:24.50 ID:15q7gB85.net] 実際、C++は、特に初期の頃はCより全面的に優れていると誰でも思えるような 物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで 全否定するようなことをインタビューで答えるわけがない。 その後に追加されて機能は人により評価が分かれて全面的に優れているとは 思えるようなものではなくなっていた。 だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に 優れていると言えるかどうかは人により評価が分かれるので、好みにより 文壇の様なものが生じている。
268 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:30:49.67 ID:cBh+EO/A.net] >>254 ひ、日本語でおk、、、 >If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.85 >If control re-enters the declaration recursively while the variable is being initialized, the behavior is undefined. はどう読めばいいの? 結局concurrentlyにre-enterされるときはbehavior is undefinedとしか読めなさげ >>254 以上の状況なので>>244 の糞コードは直しても仕方が無い
269 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:36:38.84 ID:66hkUr5p.net] メモリを自動解放するfinally機能さえあればCでも大丈夫とは思う
270 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:50:33.49 ID:yIsM5ONG.net] https://imgur.com/aX1iNMp.jpg
271 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:52:01.95 ID:cBh+EO/A.net] とオモタがcontrol enters the declaration concurrently のときは初期化のcompletionまでshall waitで、 ただしrecursivelyだとイカン(未定義動作)と書いてあるのか…… つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう
272 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 23:09:38.17 ID:eTOvJaZ9.net] >>251 そうか まあ仕様的にはスレッドセーフだわ 関係ないけど参照したグローバル変数に値が入っとらんで困ったことがあった
273 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:30:26.82 ID:62gS+LUW.net] >>258 なんかスレッド安全性の問題にしたいようだけど、 そもそも>>244 の第一の問題点は2番目のSingletonの呼び出しだけ別のオブジェクトを指してしまっている点だよ stdoutの2行目だけ0になってるだろ? その原因の説明が>>246 というわけだ すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない
274 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 04:31:29.75 ID:HRRCwLhx.net] >>263 >>258 じゃないし、よく分からないけど https://ideone.com/69FQhL ではダメなの?
275 名前:デフォルトの名無しさん [2021/09/06(月) 04:31:59.38 ID:G2BRvA3h.net] ビャーネ・ストロヴストルップその人のインタビューだとは私も考えてませんよ、これはブラックジョークというべきでしょう、まあC++er が気を悪くする理由は理解できますが それに私も GNU Multi-Precision Library を使うときはC++のラッパの方を使います。C インターフェースの方は使い難くって使い難くって、これはもう罰ゲームですね‥‥ だから演算子のオーバーロードも控えめに使えば有用という立場です、紹介することと賛成することとは別だと思います https://mevius.5ch.net/test/read.cgi/tech/1434079972/84
276 名前:ハノン mailto:sage [2021/09/06(月) 04:40:03.34 .net] テステス
277 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 07:17:56.24 ID:7SReNX2q.net] >>263 スレッドセーフでなくともよいシングルトンとか >メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、 で良くね? >>264 >>263 じゃないが非アトミックな操作(初回か否かチェックして初回なら初期化する) であることが明示される分その書き方の方がマシ 必要なら排他する、不要ならしないという判断ができるから >すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない (>>263 ) という願いも叶うYO!
278 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:08:09.17 ID:62gS+LUW.net] >>264 確かに普通こんな感じだな テンプレート別々にすることだけで頭止まってた >>267 そうだな 書いてはみたがC++でシングルトン使う意味は無いと思う あれはグローバル変数の無いJavaでグローバル変数を使うためのハックだとか聞いたし じゃあもう普通にグローバル変数使えばよくね、と
279 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:45:11.58 ID:3/UK3SOv.net] グローバル変数と同じなのでだめだよな 普通に動的に用意して渡せばよろしい
280 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:48:23.63 ID:HRRCwLhx.net] ログとかアプリの現行設定ファイルとかはSingletonっぽく実装するけどなぁ・・・ インスタンス生成が遅いものはただのグローバルにしたら起動が遅くなるし
281 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 09:20:13.64 ID:FistWoaj.net] >>268 最初のデザパタ本であるGOF本はc++とsmalltalkで書かれてるんで、javaは関係ないよ
282 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 10:32:20.65 ID:d5h9Y6Qi.net] シングルトンはスレッドセーフが実現できれば問題ないでしょ
283 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 12:01:04.36 ID:KKMECnvR.net] >>255 >>265 これは「権威に訴える論証」を悪用した主張であり、議論の対象としてはいけない類のもの。 もし真面目に議論したいのなら、少なくともStroustrupの名前は消して内容だけに修正しなくてはならない。 本人も否定しているのに訂正もしないようなフェイク記事は邪悪。それに対してコメントを求めるのは正気を疑う。
284 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 12:06:51.69 ID:86SPG0/G.net] その昔、こんなクラス作ってたな class WinMainArguments { public: static HINSTANCE hInstance; static HINSTANCE hPrevious; static LPSTR lpszCmdLine; static int nCmdShow; };
285 名前:デフォルトの名無しさん [2021/09/06(月) 15:04:51.66 ID:DsY+3+kX.net] >>265 ブラックジョークは大半の人が聴いた瞬間にジョークだと判るから成立する 麦藁禿のあの名文はまさにそれ だまされてるのは事情を知らない若い人かも知れんな
286 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 15:52:40.84 ID:86SPG0/G.net] >>265 GMPについて同意見
287 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 16:43:26.89 ID:akmYwjNo.net] >>274 ネームスペースつかえよバカww
288 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 16:51:37.50 ID:5nha9zO6.net] >>277 初期のc++には名前空間が無くてなぁ。 標準化する前だから良く知らんが。
289 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 17:50:02.90 ID:xrgLRigr.net] その初期のC++ってもしかしてEC++とかいうパチモンじゃないですかね
290 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 17:51:19.11 ID:ugWeBDlD.net] 今更バイエルの運指について議論してるような雑魚に構うなよ C++もピアノも、憧れだけあって実力がまるでないバカ
291 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 20:33:14.67 ID:d5h9Y6Qi.net] 日本語版(0xCC=フ)によりフフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな 「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン https://www.fnn.jp/articles/-/224754
292 名前:はちみつ餃子 mailto:sage [2021/09/06(月) 23:42:11.67 ID:buVCF6sT.net] >>278-279 D&E によればネームスペースは 1991 年に ANSI/ISO の委員会において浮上したトピックであるとのことだ。 逆に言えばそれ以前には無かった。 Windows 3.1 の頃に C++ でプログラミングしていたなら >>274 のようなコードが有ったとしても不自然とは言い切れない。
293 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 02:14:57.06 ID:b2odouMM.net] 今でもchar_traitsみたいのあるね
294 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 02:29:38.39 ID:fAleIY7G.net] なあに名前空間的な修飾を省略させたくない時に役立つ
295 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 03:15:39.97 ID:5ki66s4L.net] >>259 cに付け加えるならgoのdefer文かなと思う。
296 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 11:04:53.08 ID:1Eqd+3ka.net] C
297 名前:...Cにだってtry~catch~finallyあるんだからね!(ネタ=setjmp/longjmpを使ったマクロ) https://gist.github.com/rampion/91594 [] [ここ壊れてます]
298 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 23:50:11.37 ID:jZhA4bAr.net] >>286 ちなみにtry~catch~finallyっぽいのはVC++が持つと光と闇が両方そなわり最強に見える Cが持つと逆に最適化が合わさり頭がおかしくなって死ぬ
299 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 05:21:53.89 ID:KzXEzs8I.net] >>287 別に頭がおかしくなって死なないでしょ finally機構で資源解放する機会が増えるのはユーザーの利益になるだけで、複雑さを増す不利益にはならないよ
300 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 05:59:59.53 ID:4NmVrZFW.net] 確かにgccだと-O1でも2でも3でも暴走しちゃうけど、vc++だと最適化してもちゃんと動くね
301 名前:デフォルトの名無しさん [2021/09/08(水) 09:59:21.28 ID:1wbeyQs7.net] VC++はマイクロソフト拡張によってCでも構造化例外処理が使えたんだよね __try __except __finally
302 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 10:59:12.67 ID:6jFCz4HP.net] intalコンパイラはほんとにヤバいが、gccの最適化で変なことになったことは自分は一回もない
303 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 17:34:33.82 ID:nCYYHiA4.net] finallyは20年前からBorlandC++に既に実装済だったしその頃のVC++なんか>>146 の状態やし
304 名前:ハノン mailto:sage [2021/09/08(水) 19:46:07.29 .net] >>276 ですよね!
305 名前:ハノン mailto:sage [2021/09/08(水) 19:47:37.26 .net] >>286 最近まで try.. catch の実装の大半は sjlj だと思っていましたが最近は違うのですか?
306 名前:ハノン mailto:sage [2021/09/08(水) 19:51:02.76 .net] >>273 あなたはジョークの分からない人か、それとも >>275 のいう若い人か >>242 は >>230 と同様でしょ
307 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 19:52:56.05 ID:zE01k1pD.net] >>294 IDが出る板でID消してると浪人焼かれるぞ
308 名前:ハノン mailto:sage [2021/09/08(水) 20:33:06.31 .net] >>296 それは単なる都市伝説 お布施を毎年律儀に払っている人にそんなことをするわけがないでしょう‥‥
309 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 20:48:20.14 ID:4NmVrZFW.net] >>289 の件、再現コード抽出しました。最適時i=1がlongjmp後に0に戻ります。 // gccだと最適化なしなら正常終了。最適化すると終わらない。 #include <stdio.h> #include <setjmp.h> int main(int argc, char *argv[]) { int i = 0; jmp_buf jmpbuf; _setjmp(jmpbuf); printf("hoge\n"); if (i < 1) { i = 1; longjmp(jmpbuf, 1); } return 0; }
310 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 21:06:38.45 ID:QZMwNs5W.net] gccで例外ぽい事したいならC++にして使えで完結しちゃうからな……
311 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 21:09:30.53 ID:4NmVrZFW.net] インラインアセンブラとかでもない限り、処理系依存の文法を使いたくはないし、>>286 はあくまでネタですよ。 ただ最適化時の挙動が違う原因を知りたかったので、個人的に調べた結果を載せといただけです。 お気になさらず。
312 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 22:55:38.96 ID:7k6oklod.net] setjmpの結果を変数に入れちゃダメだって教わらなかった?
313 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 23:11:18.07 ID:cWvdMGeM.net] 入ってなくない?
314 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 02:02:27.18 ID:aICFtjZy.net] >>297 規制議論板を一度でも見たことがあるの? どれだけのIDを消して書き込んでる奴が浪人焼かれてるかその目で確かめてくるといい
315 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 02:39:56.24 ID:AtdpUvef.net] コテとトリ付けながらIDは消すとかいうガイジムーブ 他スレでの荒らしがバレたら困りますって宣言してるようなもんだな笑
316 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 03:11:54.20 ID:GRtgENVW.net] >>298 https://www.jpcert.or.jp/sc-rules/c-msc22-c.html
317 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 03:58:39.82 ID:k9fYYQrZ.net] >>305 何を言いたいのか分からない無言URL貼りは時間の無駄なのでやめて欲しいです。少なくとも該当していません。
318 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 04:10:55.91 ID:k9fYYQrZ.net] 一応書いておくと、>>298 のコードは見れば分かるとおりiをvolatile宣言して最適化の対象から外せば当然動きます。 これはlongjmpに限った話ではありません。 先のURLの個別のコードにはありませんが、一般論としての記述はありました。このサイトが元にしてるサイト(リンクのURLは違いましたが)ではvolatileも例に含まれているようです。 https://wiki.sei.cmu.edu/confluence/display/c/MSC22-C.+Use+the+setjmp%28%29%2C+longjmp%28%29+facility+securely
319 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 04:18:38.68 ID:k9fYYQrZ.net] すみません。見落としてただけみたいですね。日本語の方でも個別のコードありましたね。寝ぼけてたかも。
320 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 08:55:47.93 ID:+RnvyubR.net] >>295 嘘記事かどうかくらいは書いておくべきだと思うがね だいぶ前に初めて見たとき俺も半信半疑だったし(D&Eをまだ読んでなかった頃だが てかオブジェクト指向のとこをテンプレート(メタプログラミング)に置き換えるとすごいしっくり来るんだよなアレ
321 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:39:56.43 ID:emntwqXC.net] >>295 全然違う。 >>230 は少なくとも本人の発言からの引用であり、(権威に訴える論証が混ざっているとはいえ)すべてを否定することはできない。 >>242 は自分の主張を強化するためにでっち上げた嘘であり、本人の普段の主張を否定する邪悪な紛い物。本人も否定しているものをジョークと称するのはやはり正気を疑う。
322 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:56:38.90 ID:emntwqXC.net] >>295 一言言い忘れた。 ジョークを「主張」するなよ。アホか。
323 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:44:12.96 ID:9obv3E3K.net] ワクチン拒否とかしてそう
324 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:45:48.31 ID:I6ZDQIJr.net] ダニングクルーガー効果のなんちゃってマスター状態でも容易に書けちゃうのが問題。 そのクソコードの状態でも一応動くところがC++の恐ろしいところでもあり幅広いフリーフォーマットの適応力でもある。
325 名前:デフォルトの名無しさん [2021/09/09(木) 19:54:26.64 ID:VcdPV4nP.net] jokeもhumorも馬鹿には理解できない
326 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:23:36.23 ID:M2q//47O.net] >>312 自粛警察乙 マスゴミに煽られるまま踊るのジュリアナのお立ち台みたいな気分?
327 名前:デフォルトの名無しさん [2021/09/09(木) 20:26:09.91 ID:5B6QjFP1.net] お前らってホント人にケチつけるときだけイキイキとしてんな
328 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:41:37.86 ID:Ja2+yviO.net] シャリーア・ポリスとかスシ・ポリスとかみたいな人
329 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:18:20.93 ID:ke/Tkn8S.net] オブジェクト指向も構造化も原理主義者がウザいだけで ナンチャッテでいいからやってると問題がきれいに整理できるので やめようとは全然思わない テンプレートだってそうだ
330 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:23:49.14 ID:rfW8qH4V.net] pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg
331 名前:デフォルトの名無しさん [2021/09/11(土) 12:26:09.65 ID:3OqmYb77.net] C++には酸っぱい葡萄もある
332 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:37:06.92 ID:FXACoymx.net] テンプレートってただの超絶便利機能だろ オブジェクト指向笑とは比べ物にならない
333 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:45:07.36 ID:d+bn5JZd.net] >>318 歴史は繰り返す、ってことだろ 一時期C++コミュニティがJavaに悪影響受けたりしてたことからJavaを嫌悪してたやつが 何でもSTLの真似してりゃ自動的に価値のあるコードになると盲信してたからな 笑うしかない
334 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:49:01.51 ID:ke/Tkn8S.net] 俺ら技術屋の辛いとこだよ 新しいものはとりあえず食ってみるしかない あげくゲロマズで非常に気分が悪くなることもあるが怖がってらんない
335 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:59:15.55 ID:d+bn5JZd.net] 技術屋というか、実用してる人は盲信はしないと思う 原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ 自分の頭で考えて使ってれば、自ずと長所も短所もわかるもんだ
336 名前:ハノン mailto:sage [2021/09/11(土) 14:40:07.67 .net] >>311 人を選ぶジョークとはまさに >>242 のことだったんですね‥‥ 今回は勉強させていただきました
337 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 15:50:05.22 ID:pU9Ou8D7.net] 分かったら二度とデマ流すなよ ワクチンにマイクロチップだのどこそこの銀行が潰れるだの朝鮮人が井戸に毒入れただのもだぞ 本人は軽いジョークのつもりでも、デマとして流行したら人が死ぬんだからな
338 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 18:07:47.03 ID:ke/Tkn8S.net] > 原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ ほんこれ
339 名前:デフォルトの名無しさん [2021/09/11(土) 21:27:01.30 ID:3OqmYb77.net] そうはいってもC言語規格にfinally機構があったら便利なはず PGが規格追加に後ろ向きになってしまうのはコンパイラの対応が信頼できるレベルになるまで時間がかかる不快な経験を積んできたから
340 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:45:47.80 ID:mopEDxb+.net] デストラクタもないC言語にfinallyだけあってもねぇ…
341 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:55:48.31 ID:x2ZLDQix.net] じゃあC#使えで……
342 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:59:46.39 ID:3OqmYb77.net] >>329 デストラクタがないからこそfinallyで資源解放処理を呼び出す需要があるともいえるんだけど
343 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:14:53.27 ID:rQxvOqzv.net] >>331 実際に書いてみたらわかると思うけどどこからfinallyに来るのかわからないから解放処理書くのはけっこう大変だぞ
344 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:44:38.83 ID:3OqmYb77.net] どこから来るかわからないのはgotoも同じ
345 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:51:49.85 ID:6kN4WIJa.net] だからたいして楽にはならんよって話ね
346 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:54:02.48 ID:zCvRZpSn.net] 例外がいらんわ 必要としてるやつはC使うなよ
347 名前:デフォルトの名無しさん [2021/09/11(土) 23:18:46.75 ID:EO9owr6G.net] 関数毎に atexit かな
348 名前:デフォルトの名無しさん [2021/09/12(日) 01:57:56.96 ID:z8yQu9Mw.net] Goのdefer文でいいんじゃないか
349 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:03:53.61 ID:JRO5EM3e.net] ハノンフルボッコされて火病を起こしててワロス 自分が悪いのに逆ギレするほどみっともないことはないなあw
350 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:40:02.90 ID:AN8tG6su.net] 整形後に関数が10行以上になったらコンパイルエラーにしよう 関数名1行+開きカッコ1行+return1行+閉じカッコ1行だから実質5行までな
351 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:24:15.40 ID:SBMPlzna.net] たまにちびっこだらけのピアノ教室に一人だけ下手くそなおじさんが混ざってて臆面もなく発表会とかにも出てくるけど、それがその固定ハンドル
352 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 17:30:32.90 ID:d/9I2lQ9.net] 質問でsが std::this_thread名前空間内の関数は、std::thread以外の手段で作ったスレッドで 実行しても大丈夫なんでしょうか、 一部のC標準ライブラリ関数みたいにスレッド起動手段次第でリークしたりすることは無い? https://cpplover.blogspot.com/2010/10/msvc.html
353 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:10:18.89 ID:TJh0S1vO.net] >>341 やってみないと分からないから自己責任でご自由にどうぞ、というのが正しい回答
354 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:54:34.09 ID:d/9I2lQ9.net] >>342 std::thread以外の手段で作ったスレッドで実行したときのふるまいは 規格上非規程ということでおk?
355 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:58:14.10 ID:d/9I2lQ9.net] 未定義動作とか処理系依存とかではなく、規定されていないということ?
356 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 20:27:37.58 ID:x/1IPUIX.net] 大丈夫なんじゃないすかね mainはstd::thread以外の手段で呼び出されるんだし
357 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 21:31:25.44 ID:ewAYKYUU.net] どうやってアクセスするん
358 名前:ハノン mailto:sage [2021/09/13(月) 01:29:14.15 .net] >>326 米国民主党の宣伝=ロイター・ブルームバーグ=真実 米国共和党、なかんずくプレジデント・トランプの言ったこと=フェイクニュース という理解でいいでしょうか?イヴェルメクチンの話 https://www.youtube.com/watch?v=zhIg_KNfyhQ >>338 どこがフルボッコか詳しく、ジョークのわからない馬鹿一人だけが騒いでいた、という印象ですが >>340 バッハコンクール大人の部には出てみたいですね‥‥たぶんよくできる中高生のなかに一人ヨボヨボが混ざるの図になりそうですけれどもね
359 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 02:16:31.80 ID:ZygXXNwA.net] >>347 コンクールとは無縁の音楽歴だろうがクソバカが 見栄張んなよ 精々弱小音楽教室の発表会止まり
360 名前:デフォルトの名無しさん [2021/09/13(月) 03:47:26.34 ID:PttYpQoG.net] わかるよ C++とはつまりCから2キー(2半音)上げたDという意味 ピアノならCはドでDはレ
361 名前:デフォルトの名無しさん [2021/09/13(月) 04:01:44.26 ID:PttYpQoG.net] このスレにMIDIエンジンを自分で作ったことある人、どのくらいいる?
362 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 06:59:19.04 ID:ZygXXNwA.net] ピアノじゃなくても「CはドでDはレ」だと思うが……
363 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:04:19.91 ID:B8QV0Pmm.net] MDLを入力してWAVを出力するコンパイラみたいのなら
364 名前:デフォルトの名無しさん [2021/09/13(月) 07:13:59.03 ID:PttYpQoG.net] >>351 思うだけならあなたの自由だから好きにしなさい
365 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:15:10.48 ID:OJvNe7+i.net] >>351 世の中には移調楽器って言うものがあって、例えば普通によく見かけるトランペットはドの音はB♭だったりする
366 名前:デフォルトの名無しさん [2021/09/13(月) 07:16:20.40 ID:PttYpQoG.net] Windowsの標準システムドライブがCであることの経緯を知らないでPGやってる人、どのくらいいる?
367 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:50:09.00 ID:B8QV0Pmm.net] UNIXから一歩も離れたくない人とか?
368 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:56:33.80 ID:9W3p606T.net] aとbドライブがフロッピー
369 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:59:56.78 ID:B8QV0Pmm.net] かつて日本ではAがHDDだった
370 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:28:48.75 ID:Kz73eSbE.net] >>350 SWFreaderのこと? SoftwareSynthesizerのこと?
371 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 12:01:25.13 ID:DUyA86Uv.net] MIDIなんてPC-98以前のFM音源搭載機でしかいじらなかった MIDIドライバとかならともかくMIDIエンジンが何なのかよく分からない
372 名前:ハノン mailto:sage [2021/09/13(月) 13:47:19.19 .net] >>348 スレチガイも大概だからここで終わりましょうか バッハコンクール https://www.bach-concours.org/p/about.html 趣旨「J.Sバッハの作品はクラシック音楽の真髄、導入期からポリフォニー音楽や舞曲に親しみ、ピアノの学習の中に取り入れて、そしてレパートリーにしていただきたい」、おっしゃるとおり誰でも参加可能です https://matsuri.5ch.net/test/read.cgi/piano/1488364000/ バッハはこんな曲を作った人:https://www.youtube.com/watch?v=SBWGgwzcjYc 確かアニメ監督の押井守は若い頃バッハの合唱団にいたと聞いています
373 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 19:44:06.04 ID:O/wDGHc8.net] >>361 スレ違いはお前一人なんだが・・・
374 名前:デフォルトの名無しさん [2021/09/15(水) 11:32:22.49 ID:0GWRKP/3.net] 関数のポインタを引数で受け取る関数に 予め定義した関数のポインタの代わりに lambda関数のポインタを渡したいとき どう書けばよいですか?
375 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:43:21.99 ID:KsZNjWDc.net] >>363 ラムダ式を呼び出すラッパー関数を作って、その関数ポインタを渡す
376 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:57:59.21 ID:tjq2eHQi.net] std::functionでええやろか?
377 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:01:19.03 ID:+suq2kti.net] >>363 こういうこと? void func1(void (*arg)()) { arg(); } template <std::invocable F> void func2(F arg) { arg(); } int main() { func1([]{}); func2([]{}); }
378 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:57:52.48 ID:gM7DTPzC.net] >>363 違うかも知れんけど、関数ポインタとラムダと型推論でなんかハマってこの記述に落ち着いた。 ttps://ideone.com/UNUgdi
379 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 13:01:11.97 ID:/JHaU2Oz.net] >>363 クロージャ (ラムダ式によって作られた関数オブジェクト) は周囲の変数をキャプチャしないときに限り関数ポインタに変換可能。 https://timsong-cpp.github.io/cppwp/n3337/expr#prim.lambda-6 逆に言えばそうでないときは関数ポインタと互換性はない。 受け取る側が関数ポインタとして受け取るという前提を動かせないのであれば 渡すラムダ式のほうをキャプチャしない形にしてくださいということになるし、 汎用的にラムダ式を受け取れるようにしたいのだということであれば >>365-366 という方法をとることになる。
380 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:03.04 ID:0GWRKP/3.net] >>366 template<typename F> void func2(F arg) { arg(); } int main() { func2([]{}); } ↑ これだと動いています void func1(void (*arg)()) { arg(); } int main() { func1([]{}); } ↑ やりたいのはこっちだったんですがこれはコンパイルエラーになりますた # invocable は C++20 からみたいですね 目的にあってるかどうか判りませんが試す環境が今無いので後回しです
381 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:45.58 ID:0GWRKP/3.net] >>368 ああなるほど [&] してたのが原因かも知れません ありがとうございます
382 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 13:22:34.75 ID:+suq2kti.net] そういうオチか
383 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:27:00.87 ID:46YA8/2z.net] >>369 ヒント: コンセプト
384 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 21:11:24.40 ID:wgmfJty/.net] 単項+が意味を持つ例のやつか
385 名前:デフォルトの名無しさん [2021/09/17(金) 16:40:49.64 ID:J/w/zJeW.net] 仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です ⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない… https://www.youtube.com/watch?v=zkwQOdq17dI 【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの? https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s 【ひろゆき】社会人語っちゃうサラリーマンについて語りました https://www.youtube.com/watch?v=pX7NHj_rIBg 奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】 https://www.youtube.com/watch?v=evQjCUWIHV4 【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見! https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s 【ひろゆき】日本のサラリーマン制度...終わってますよwww https://www.youtube.com/watch?v=Y-30zk2zDn0 【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき https://www.youtube.com/watch?v=cMjk9B4J2n4 【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい? https://www.youtube.com/watch?v=5cS7vyb0tfE
386 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:55:20.00 ID:fzYJNrfO.net] 聞いてくれウィンドーズ10で GetLocalTime(&st1); const system_clock::time_point now = system_clock::now(); GetLocalTime&(st2); とした後に、nowから const time_t tt = system_clock::to_time_t(tp); auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000; としてnowのms単位のUNIX Timeを算出したらば、 st1 ≦ now は当然成立しているが、 now ≦ st2 は成立しないことがあり、何か now ≦ st2 + 1 なんじゃわ;;; 何で?!
387 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:57:50.95 ID:fzYJNrfO.net] 処理系はMSVC2019でつ、 duration_cast<T>はTで指定した時間単位未満は切り捨てとC++の規格で決まっているはず……
388 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:05:15.92 ID:fzYJNrfO.net] ちなみにst1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから おかしいのは明らかにstd::chronoの方、
389 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:23:54.83 ID:I+biH5jK.net] >>377 これだけじゃどっちがおかしいかは分からんでしょ GetLocalTimeが正しいと思うからGetLocalTimeでsystem_clock::nowを挟んだんじゃないかい
390 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:43:19.07 ID:fzYJNrfO.net] >>378 >>377 のは時刻のキャッシングみたいなことをしており呼び出した瞬間の時刻を返していないとしたらそれはGetLocalTime()の方ではない、という証左 つなみにマルチコアと最適化(いやしくもAPIの呼び出しがあるのであり得ないが)とプリエンプションの合わせ技で 実行順序が変になり得るかも、みたいな被害車妄想で GetLocalTime(&st1); const system_clock::time_point now = system_clock::now(); _ReadWriteBarrier(); GetLocalTime&(st2); としてみたが>>377 な現象は変わらんかったは、
391 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:48:57.22 ID:vjp4M7Ow.net] windowsのAPI同士で比較しろ 一般に違うAPIを使ってるなら一貫した結果にならなくてもおかしくない
392 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:53:59.82 ID:I+biH5jK.net] ちゃんと知りたいならsystem_clock::nowが内部でどのAPIを呼んでいるのか調べてみては
393 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:58:54.14 ID:EqZgRVmV.net] 変数tpはなにものですか
394 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 14:01:55.85 ID:EqZgRVmV.net] というか% 1000っておかしくね???
395 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:12:35.69 ID:EWVuImUN.net] >>375 お前の頭がおかしいんだよ
396 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:47:53.30 ID:hcp/HEe5.net] 不等号≦への理解、間違ってないか
397 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 07:30:37.33 ID:CNUd2o2A.net] unsignedとintを比較してるとかどうせそういうオチだろ
398 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 13:12:19.06 ID:/yxUr6Cy.net] 中途半端なコード
399 名前:セけチラ見せされてもな 再現する完全なコードを出せとしか [] [ここ壊れてます]
400 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:50:35.11 ID:neurUQ4a.net] >>386 天才なのでそんなヘマはしますしません、 >>387 再現コード貼る、 https://ideone.com/GeMebI ※ 冒頭コメントの通り、非Windows環境では現象再現しないコードなのので注意 ウィンドーズでの実行結果: i=---: st1, chrono, st2: ORDER CHECK i= 0: 1632034143228, 1632034143228, 1632034143228: OK. i= 1: 1632034143229, 1632034143229, 1632034143229: OK. i= 2: 1632034143229, 1632034143229, 1632034143229: OK. i= 3: 1632034143229, 1632034143230, 1632034143229: NG! i= 4: 1632034143229, 1632034143230, 1632034143229: NG! i= 5: 1632034143230, 1632034143230, 1632034143230: OK. i= 6: 1632034143230, 1632034143230, 1632034143230: OK. i= 7: 1632034143230, 1632034143231, 1632034143230: NG! i= 8: 1632034143230, 1632034143231, 1632034143230: NG! i= 9: 1632034143230, 1632034143231, 1632034143230: NG! ==> ORDER CHECK 「NG!」のところでchrono > st2 になっており、chronoのtime_pointがSYSTEMTIMEを1 msだけ追い越している
401 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:57:36.84 ID:neurUQ4a.net] こっそり訂正するが、>>377 で >st1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから と言ったがな、ありゃ誤報だスマンカッタ、 あとちなみに、>>375 を書いた時点では、現象再現はFILETIMEを使わずに、以下の方法で、 SYSTEMTIMEと ( (time_point - epochタイム) を tm構造体に変換したもの、の それぞれからから直接シリアル日時を出して比較すた、 year * (12 * 31 * 24 * 60 * 60 * 1000) + month * (31 * 24 * 60 * 60 * 1000) // 一ヵ月の日数を31固定で換算しているが、大小比較目的なのでこれで問題無い。 + day * (24 * 60 * 60 * 1000) + hour * (60 * 60 * 1000) + minute * (60 * 1000) + second * (1000) + millisecond
402 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:10:18.78 ID:HwX1dH8g.net] まともに読んでないがバリアの使い方がおかしくて実行順序入れ替わってるとかじゃね??
403 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:33:01.30 ID:neurUQ4a.net] >>390 (1) _ReadWriteBarrier()は最強のバリアーやぞ;;; (2) GetLocalTime()がどんな副作用を持つ関数かコンパイラが知るはずは無いのだから 最適化でコードの入れ替えや変数のレジスタ割り当てしっぱなしということはあり得ない (3) ていうかそれ以前に、GetLocalTime()やstd::chronoの呼び出し元がシングルスレッドなのだから それで順序がおかしくなるとかCPUがおかしいか、スレッドをプリエンプトして再びディスパッチする際に 別のコアに実行させようとする際にOSがヘマしているかのどちらかという話に…… ちなみに漏れは正常動作しており、本人が言うのだから間違いない
404 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:39:43.92 ID:k8GedCcQ.net] https://gist.github.com/t-mat/3763854 Windows10ならSYSTEMTIMEよりsystem_clockのほうが精度高そうですね
405 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 17:02:40.43 ID:nkVr2ypq.net] >>375 GetLocalTime の分解能は 10ms くらいっぽいぞ。 system_clock::now がもっと精度の高い API を使っていたら そんくらいの前後はあってもおかしくないんじゃね。
406 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:17:42.61 ID:k8GedCcQ.net] https://ideone.com/qA5yOL system_clockの部分を生のFILETIMEで置き換えてみた 実行結果はこんな感じ i= 0: 132765453416200000, 132765129416213861, 132765453416200000: NG! i= 1: 132765453416210000, 132765129416218094, 132765453416210000: NG! i= 2: 132765453416210000, 132765129416218837, 132765453416210000: NG! i= 3: 132765453416210000, 132765129416219530, 132765453416210000: NG! GetLocalTimeやめたら?
407 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:28:49.56 ID:UeoKc9fZ.net] 時刻取得用のAPIをパフォーマンス計測用に使っちゃったんだね WIN32では大昔からQueryPerformanceFrequencyとQueryPerformanceCounterを使うよ https://docs.microsoft.com/en-us/windows/win32/api/profi
408 名前:leapi/ [] [ここ壊れてます]
409 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:59:29.70 ID:UeoKc9fZ.net] 時刻取得でそのまま精度を上げるAPIとしては GetSystemTimePreciseAsFileTime https://docs.microsoft.com/ja-jp/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime ただしWindows 8以降。それ以前だと以下を使うしかないっぽいね。 GetSystemTimeAsFileTime std::system_time::nowの実装としては、_Xtime_get_ticksを使用している(2021年9月21日17:57JST現在) https://github.com/microsoft/STL/blob/main/stl/inc/chrono#L663-L665 これが使用しているAPIについて聞いたStackoverflowの質問 https://stackoverflow.com/questions/54933940/what-clock-does-the-visual-studio-2017-crt-implementation-of-stdchronosystem 上記によると最初に書いたAPIである模様
410 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:46:00.85 ID:neurUQ4a.net] >>393 GetLocalTime()の精度が10 ms台だというのは Windowsのデフォルトのスレッドへの最大ディスパッチ時間15.6 ms(PCによっては10 ms)の影響が混入している可能性、 >>392 のリンク先のような計測方法をとった場合、計測中に他のスレッドに実行権を横取りされたりすると、どうしても 期待する時間に対して15.6 msとか(高優先のスレッドが相次いでディスパッチされた場合はあるいはもっと)実際の時間が大きくなる 一方>>375 の計測方法は時間の順序にのみ注目しており、プリエンプションの影響を受けない(はずだった この話に猜疑があるなら後で述べる >>392 >>392 の情報提供はdクスやし実際乗り換えようかと考えているが、それはそうとして、std::chronoのふるまいを検証しなくて委員会?
411 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:05:49.20 ID:neurUQ4a.net] というわけでms単位のUNIX timeを得るにあたってstd::chronoとGetFileTimeAsSystemTime()が同じ精度であり互換であることを 直接検証すた、 https://ideone.com/9Opqj9 実行結果(Windows 10) i=---: st1, chrono, st2: ORDER CHECK i= 0: 1632049473157, 1632049473157, 1632049473157: OK. i= 1: 1632049473158, 1632049473158, 1632049473158: OK. i= 2: 1632049473159, 1632049473159, 1632049473159: OK. i= 3: 1632049473159, 1632049473159, 1632049473159: OK. i= 4: 1632049473159, 1632049473159, 1632049473159: OK. i= 5: 1632049473159, 1632049473159, 1632049473159: OK. i= 6: 1632049473159, 1632049473159, 1632049473159: OK. i= 7: 1632049473159, 1632049473159, 1632049473159: OK. i= 8: 1632049473160, 1632049473160, 1632049473160: OK. i= 9: 1632049473160, 1632049473160, 1632049473160: OK. NG times=0/10 問題無くなったやたー
412 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:13:38.40 ID:neurUQ4a.net] >>393 GetSystemTime()は確かに根本的に精度悪かったスマンカッタorz この結果からすると、ウィンドーズのシステム時間のの実装は、 OSがプリエンプトした際に更新し、ディスパッチ中は値が変わらないというしくみな可能性が大きい ※ 取得時間の間隔が15.6 msの倍数にならないのは、15.6 msというのがあくまで1津のスレッドが ディスパッチされてからプリエンプトされるまでの「最大」時間であって実際は高優先のやつに横取りされたり 自発的に待ちに入ったりで15.6 msより小さい時間で実行権をOSに返すからだと思う
413 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:46:58.47 ID:UeoKc9fZ.net] 古いWIN32開発者には常識的な話で検証の必要もなく、実際に検証用のプログラムは昔から大量に作られてるからだと思う 取得時間の間隔が15.6 msの倍数にならないのは「主に16ビット Windows との下位互換性のため」 https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/windows-time
414 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:17:24.32 ID:k8GedCcQ.net] >>400 後半って「Windows時刻」の説明だよね? GetSystemTimeで得られるのは「システム時刻」であって、また別の時刻体系だと読んだけど間違ってる? https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/system-time WinAPIスレに持っていったほうがいいかもな
415 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:38:35.16 ID:UeoKc9fZ.net] >>401 大元はWindows3.1時代からあったGetTickCountだと思うんだけど、説明的にそこしかなかったから書いた WinAPIスレで聞きたければどうぞ
416 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:06:39.19 ID:luBeUSFz.net] 周期15.6 msを下位互換性のために新しいWindowsがエミュレートしているというのはありえない 1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、 hp.vector.co.jp/authors/VA007219/rtc_pic.html だいたい設定でも変わるし、 https://atmarkit.itmedia.co.jp/ait/articles/1410/30/news150_2.html (スレッドのクォンタムタイム) 取得間隔が15.6 msにならない理由は>>399 で説明いしたし
417 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:10:20.87 ID:luBeUSFz.net] で、GetTickCount()の分解能かきちり1 msであることはビジーループ的に値をとってみたらワカル 分解能に関して後方互換性も糞もなく昔からそいうブツのはず 多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ
418 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:25:55.12 ID:luBeUSFz.net] と思って、 const int N = 10; std::vector<DWORD> vec; DWORD curTmg = GetTickCount(); DWORD prevTmg; while (vec.size() < (size_t)N) { prevTmg = curTmg; curTmg = GetTickCount(); if (prevTmg != curTmg) { vec.push_back(curTmg); } } for (int i = 0; i < N; i++) { (差分vec[i] - vec[i-1]をprint) } というのをやったら、
419 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:26:50.20 ID:luBeUSFz.net] vec[0]=1391507593 vec[1]=1391507609 (diff=16) vec[2]=1391507625 (diff=16) vec[3]=1391507640 (diff=15) vec[4]=1391507656 (diff=16) vec[5]=1391507671 (diff=15) vec[6]=1391507687 (diff=16) vec[7]=1391507703 (diff=16) vec[8]=1391507718 (diff=15) vec[9]=1391507734 (diff=16) やったわorz まつがえますたすみません;;; 勉強になるなあ、
420 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 06:12:36.98 ID:DnvAIBnA.net] >>402 自己レスです GetTickCountとGetLocalTimeとGetSystemTimeの分解能調査 https://ideone.com/wKC8DA 1000回値が変わるのにかかった時間をマイクロ秒で計測した(std::chrono::high_resolution_clock::now()で計測) PS C:\> .\ConsoleApplication8.exe 15614998 1003946 1000238 PS C:\> .\ConsoleApplication8.exe 15621414 1001066 1001218 PS C:\> 結論: GetLocalTimeは約1秒なのでこの環境(Win10+ハード)では1ms程度の分解能がある 感想: 誤差大きい
421 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:46:32.11 ID:Pqsh6MJQ.net] ここはWindowsAPIスレになったのか
422 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:51:13.46 ID:l/aXhlvm.net] スレタイも読めない、検索できないやつがまともなプログラム書けるはずもなく・・・
423 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:52:13.05 ID:Mm5TpRqo.net] windows API使いたがるひとがいてめんどくさい こっちはなるべく標準のc++使いたいのに
424 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 08:19:53.25 ID:VgAULHWI.net] POSIXと比べるとクソ過ぎて話にならんよな
425 名前:デフォルトの名無しさん [2021/09/20(月) 10:01:57.22 ID:LqQpPYvk.net] プラットフォーム固有の話も参考になる 今回の流れは Win32 API と std::chrono の違いが端緒だしスレ違いというほどではない
426 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:48:50.60 ID:T+6xg0LJ.net] そのクソがなんで一番利用者多いのか考えてみろ
427 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 11:24:41.17 ID:VgAULHWI.net] バカに合わせてるからだろ 言わせんなよ恥ずかしい
428 名前:ハノン mailto:sage [2021/09/20(月) 11:26:09.83 ID:+hQanlE4.net] 私馬鹿よねーお馬鹿さんよねー今日も win32api
429 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 11:30:28.88 ID:DnvAIBnA.net]
430 名前:とりあえず動かないから面白くないということなのかもなということで、Linuxのclock_gettimeにも対応しといた。 BSDとmac組は知らん。 https://ideone.com/Z9CfOo 一応WIN32はあえて低解像度のを計測してるという点だけは補足しておきます。 [] [ここ壊れてます]
431 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:15:53.36 ID:rmuhdvcF.net] timeBeginPeriod 木屋さん元気かな
432 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:28:29.25 ID:26DwFCZj.net] 元の質問見てないけどQPCでええんちゃうの
433 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:45:29.78 ID:DnvAIBnA.net] >>417 スレッドのスケジューリングも変化するので注意です。 tickとはそもそもそういうものでしたが。 archive.linux.or.jp/JF/JFdocs/The-Linux-Kernel-20.html >>418 >>395 でそう言ったし、high_resolution_clockで使用されてるのもそれ
434 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:51:33.23 ID:VgAULHWI.net] CreateWaitableTimerEx(NULL,NULL,CREATE_WAITABLE_TIMER_HIGH_RESOLUTION,TIMER_ALL_ACCESS)
435 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 13:22:11.61 ID:DnvAIBnA.net] >>420 そのタイマは同期待ち合わせに使用するタイマリソースですね 時間計測用に使うのは勿体ないのでやめましょう また無言でAPIだけ書かれても困ります
436 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 13:58:28.71 ID:VgAULHWI.net] バカか 計測するなら精度高めないと意味ないだろ
437 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 14:31:11.65 ID:LO5PkHvF.net] そもそもパフォーマンスの計測に使うなんて言ってなくない?
438 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 16:05:39.48 ID:DnvAIBnA.net] >>422 この例はExついてないけど、こういう使い方をするものなんだよ。 待機可能タイマー オブジェクトの使用 - Win32 apps | Microsoft Docs https://docs.microsoft.com/ja-jp/windows/win32/sync/using-waitable-timer-objects >>423 >>388 で求めているのは正確には時刻取得だね。つまりsystem_clockの話。 俺がしてるのは時間計測なのでsteady_clockの話。 違いは時刻の修正などにより増減するかしないかという特性の違いと、それを実現するHWタイマの分解能/性能の違い。 GetLocalTimeの分解能は文書にも記述がなく、>>393 の指摘だけで事実関係が不明なまま宙に浮いてたので、>>416 などでそれを計測した。 ここでは10〜15.6msの出元であるGetTickCountもついでに計測した。 steady_clockとsystem_clockをどこかで同時に取得して、steady_clockの分解能のまま時刻っぽいものを得るみたいなことも短期的には現実的な精度でできなくはないけど。
439 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 05:50:44.21 ID:B+D0wTVh.net] 3種類ぐらいのタイマの時刻が1000回変化するのに要するトータル時間Tを測っているらしいが この計測結果からSYSTEMTIMEの分解能がHWタイマの分解能/性能の違いに起因すると結論づけることはできない 実態は>>375 な計り方でst1: SYSTEMTIME、now: nowtime_point、st2: SYSTEMTIME、の順で立て続けに時間をとると >>388 の通り st1 ≦ now && now ≦ st2 + 1 ms という結果なわけで、この「1 ms(<15.6 ms)というのは本当にハードウェアタイマの分解能なんかい話が違うぞ?!」と詰問されて 答えに窮する>>424 な未来が見える見えまくり
440 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 05:55:32.54 ID:B+D0wTVh.net] 実態は>>399 に書いた理由のはずで、 証拠にst1の取得とnowの取得の間にSleep(1000)とか入れたら >>388 の結果はたちどころに st1 ≦ now && now ≦ st2 + 1秒 に早変わりする よってGetSystemTime()で取得するSYSTEMTIMEの分解能はHWタイマの分解能/性能起因ではなく、 GetSystemTime()で取得する時刻がOSのプリエンプションタイミングでのみの更新されるというソフト要因である、 という>>399 に述べた理屈が正解ということでケテーイ 実際にやってはいないが天才なので以上のことはちょっと考えたらワカル
441 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 06:02:51.16 ID:B+D0wTVh.net] ごめ、Sleep(1000)を入れたのではOSにプリエンプションの機会を与えてしまうからNG 正しくは GetSystemTime(&st1); 15.6 ms未満のビジーループ <== 訂正 now = system_clock::now(); GetSystemTime(&st2); とすると、 st1 ≦ now && now ≦ st2 + 15.6 ms にnowの精度が劣化する、に訂正 OSのAPIもプリエンプションの機会にならない保証が無いのでビジーループはガチでビジーループで作る必要があり、 面倒なのでやらないがな!
442 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 07:18:10.24 ID:B+D0wTVh.net] といいつつAPIに頼らずに10 ms規模のビジーループ(ビジーウェイト)させるのはやや技巧を要すると思ったので漏れが自らやってやった、 https://ideone.com/CjXN4X ※ 計測の実行は要Windows 結果、1 ms、8 ms、16 ms、1秒のどれに変えても>>388 と同じで、 std::chrono::now()の時刻nowに対し、その直後にGetSystemTime()で得た時刻st2が 1 msだけ追い越されることはあっても決して 1 msより大きく追い越されることは無かったorz なぜじゃ闇が深いなこれ、 もちろんGetSystemTime()ではなくGetSystemTimePreciseAsFileTime()を使う(↑のソースコードのPRECISE_AS_FILETIMEマクロ定義を有効化する と>>398 の通りドンピシャな時刻順になる点はビジーウェイトがあっても変わらない。 GetSystemTime()のふるまいが一方的に謎杉
443 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 08:12:02.95 ID:HzR9ZlyY.net] WinAPIスレに持っていってくれますか? 結局<chrono>に固有の問題(?)ではなくて背後のAPI関数に関することって分かったはずなんで
444 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 08:44:57.34 ID:HzR9ZlyY.net] とか言いつつ自分で探してきたので貼っちゃう…… GetSystemTimeの分解能が15.6msというのはXPまでの話らしい https://www.thedelphigeek.com/2007/10/calculating-accurate.html
445 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 09:20:27.88 ID:ZWKkb85T.net] >>425 HWタイマの分解能/性能の違いと言ってるのはsystem_clockとsteady_clockの違いの話でWindows APIの話はしてないよ。 一応補足しておくとepochも違う(時刻としてそのまま使えるのはsystem_clockということ)。 >>426 以降は妄想が迷走してるだけに見えるかな。 >>430 は新しい事実で>>393 の謎も解けたしもう俺的に不思議な部分はない。
446 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 17:45:16.21 ID:+JZgAVsh.net] > プリエンプションの機会 機会を与えないことができるのは昔のWindowsだろ
447 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 18:35:43.94 ID:8CcFj4Yb.net] 今だって邪魔できるよ 消極的ではあるけど
448 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 18:44:00.64 ID:+JZgAVsh.net] 割り込み禁止命令が実行できたり 割り込みコントローラにコマンド出せたりする デバドラかMODESETみたいのないと無理だよ
449 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 12:46:15.93 ID:9lvhFgGq.net] std::complex<double> の変数 a, b について、OpenMP の並列リージョン内での #pragma omp atomic a += b; が error: invalid expression type for '#pragma omp atomic' というエラーを出すんですが、std::complex はアトミック演算の対象外ですか? それとも他の何かを見落としてる可能性がある?
450 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:03:13.46 ID:4UIlewCz.net] ompのAPI仕様書を読むと対象はスカラー型のみって書いてあるから対象外なんじゃないの?
451 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:04:21.25 ID:4UIlewCz.net] ここのx and vってとこ https://www.openmp.org/spec-html/5.0/openmpsu95.html
452 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:07:22.68 ID:9lvhFgGq.net] 数学とか物理の用語としては複素数はスカラーですが、コンピューター用語としては違うんでしたっけ?
453 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:18:19.13 ID:loHIOGgF.net] 確かモルダーを疲れさせる女のこと
454 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:28:55.11 ID:pztAGZv/.net] 対象外 ぷりみ恥部とPOD以外だめ
455 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 14:59:44.58 ID:4UIlewCz.net] >>438 std::complexはclass型だよ。c++では
456 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 15:02:24.84 ID:9lvhFgGq.net] >>441 つまりatomicはプリミティブ型だけ想定してるってことですかね ありがとうございます おとなしくクリティカルセクションにします
457 名前:はちみつ餃子 mailto:sage [2021/09/27(月) 00:54:20.59 ID:vtQXnC4F.net] >>438 C++ におけるスカラ型の定義 ・ 算術型 (整数型と浮動小数点数型) ・ 列挙型 ・ ポインタ型 ・ メンバへのポインタ型 ・ std::nullptr_t ・ 以上を cv 修飾 (const や volatile で修飾) したもの https://timsong-cpp.github.io/cppwp/n3337/basic.types#9 言語によって定義は異なっている (または定義を持たない) ので コンピューター用語として一般化は出来ないと思う。
458 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 06:07:00.04 ID:vzE92GBt.net] ここはC++スレだからC++用語で必要充分だ 無理に一般化する必要はない
459 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 08:56:19.98 ID:P6ytpwfT.net] 複素数が「算術型」じゃないのって冷静に考えるの結構奇妙だな
460 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 19:18:30.57 ID:LR1S7vXs.net] 複素数を直接扱う命令がないCPUが多い以上、小数2個で表される複素数がスカラではないのは自然だと思うけど それを言い出すと、一般線形群と呼ばれる行列はなんでも算術型になるのではないか?と思えてくるし
461 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 19:25:38.25 ID:n9hc+rIL.net] arithmeticを「算術」とか仰々しく訳すからおかしくなる 要は小学生がさんすうで習うような単純な数のことよ
462 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:16:24.75 ID:D7AKGDxr.net] そもそも数学でも複素数はスカラじゃないよな
463 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:19:03.53 ID:sGjfmd1K.net] ベクトルの係数になるんだから基本的にスカラじゃねえの
464 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:43:23.51 ID:PI7czi9F.net] スカラーだったりベクトルだったりするらしい izumi-math.jp/K_Manabe/what_v/what_v_3.htm
465 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:51:45.61 ID:GPisoDJi.net] 複素ベクトル空間の係数体の元として見ればスカラだし複素数体を実ベクトル空間と見れば複素数は実ベクトル
466 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 07:58:37.24 ID:ZoUlFxaV.net] 除算が定義できる体なので普通はスカラーとして扱うと思うけどな。 2要素の実ベクトルや2自由度の行列に適切な演算を導入することによって同一視することはできる。
467 名前:デフォルトの名無しさん [2021/09/29(水) 10:21:13.97 ID:QYKzykPR.net] >>447 要は小学生がさんすうで習うような単純な数のことを「算術」と言うんだが
468 名前:ハノン mailto:sage [2021/09/29(水) 18:51:49.92 ID:+NS+8RdU.net] >>452 >2自由度の行列に適切な演算を導入 有名な a b -b a 以外にも複素数と同様に振舞う行列を定義できるものでしょうか?それはどんな形?
469 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 19:37:07.20 ID:F6bYTA4Q.net] 好きなX^2=-Iを満たす行列Xを用意すればaI+bXが複素数の表現になるよ
470 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 04:33:42.15 ID:a96KQdEj.net] >>454 > 有名な a b -b a 以外にも > 複素数と同様に振舞う行列 この世のことを何一つとして理解してないことがよく
471 名前:伝わってくる2フレーズ [] [ここ壊れてます]
472 名前:デフォルトの名無しさん [2021/09/30(木) 10:27:42.19 ID:rsDh5L5E.net] i 0 0 i
473 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:07:05.65 ID:CrfxKotF.net] 複素数z=x+iy (x, y:実数)とした場合どうやって行列で表現できるのか分からん そもそも無理だろ
474 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:15:59.67 ID:LH+TfD4u.net] いい加減スレチだぞお前ら
475 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:39:55.75 ID:HqpdIwHE.net] 複素数の実行列表現あたりで調べれば出てくるから自分で調べろ。 複素数ライブラリの実装は行列表現だろ。
476 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 14:36:41.46 ID:rqtJMe+2.net] 承認欲求が満たされなかったキチガイのハ◯ンが荒らしてるんだな
477 名前:ハノン mailto:sage [2021/09/30(木) 21:06:22.87 ID:SS5VJirH.net] >>460 キーワードありがとうございます! 1, 1, -2, -1 とか 3, 2, -5, -3 とか i に対応するものはいろいろあるんですね >>456 生きていてすみません
478 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 22:32:11.42 ID:hyVGcxZ+.net] 複素数ライブラリの実装が行列表現な訳ないだろ
479 名前:デフォルトの名無しさん [2021/10/01(金) 04:28:27.07 ID:YSb3+a7i.net] パウリ行列やで
480 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 08:55:53.93 ID:wyBR1P+Z.net] それは四元数では
481 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 11:45:26.96 ID:o+E+DUKy.net] そもそも勝手な演算❎とかを用意して、それを複素数の演算になるような演算規則にすればいいだけの話 普通のプログラミング言語での実装は2要素ベクトルに対して複素数積となるような演算を*に対応させているんだと思うけどな 行列積が複素数の積と同一視できるような表現行列があるというだけ 群論とか環論とか体論とか入門的にでもやればわかるよ
482 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 13:55:46.16 ID:cR/mfYmg.net] ベクトルの要素は座標変換で変わるからスカラーではない
483 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 13:59:33.99 ID:cR/mfYmg.net] まつがえたorz 誤: 変わるから 正: 変化すっから
484 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 14:34:20.70 ID:7v0dyN4q.net] 物理屋さんか?
485 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 14:56:43.55 ID:cR/mfYmg.net] んまーたしかに物理現象は座標変換しても変わらない(同じもの)とみなすのが 物理の先生なのかもしれん スカラーもそん延長線上の概念 しかし観測が系に影響を与えると言い出した時点でいつまで真理でありつづけることやら……
486 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 20:42:45.96 ID:xJ5F1jwy.net] >>467 言葉足らずだったかもしれないが、複素数体と数学的にはR2の正規直交基底かつ基底の長さが1のベクトルの成分表示を、適切な演算を入れることによって同一視することができるという話をしているのであって、一般的なベクトル空間の話をしている訳ではない。
487 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:15:26.25 ID:cR/mfYmg.net] スカラーか否かというのは数をどこに使うかの話であって 数をどう表現するかの話ではないし、
488 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:16:10.17 ID:cR/mfYmg.net] それはそうとしてR^2と言っただけでは計量が入っていないから(平行移動も糞も無いため)ベクトル空間ではない つまり { ベクトル空間 } ⊂ { R^2 } であってR^2の方がより一般的 R^2上で実数と同じ7つの演算則を満たす演算を形式的に定義することはできるが|i|=1を表すために >正規直交基底かつ基底の長さが1のベクトルの成分表示 が必要になるから複素数体を正確に言い表すにはR^2ではなくてユークリッド空間か何かが要ることになるんじゃないの
489 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 22:42:32.17 ID:5uoG6j9g.net] 加法(V × V → V)と係数体による倍演算(K × V → V)が入ってて線型ならベクトル空間だよ, 計量入れたら計量ベクトル空間
490 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:00:23.30 ID:YgA3J5wy.net] 関数の引数に参照渡しで何も渡さないようにするはどうすればよいですか 自作クラスAがあったとして、それを引数にとる関数 void hoge(int& p1, A& p2) があります。 ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。 調べてみたらnullptrみたいなのはあったので、 int p1 = 1; hoge(p1, nullptr); と書いてみても、 非constの左辺が何とかとエラーが出て、渡せませんでした。
491 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:34:05.28 ID:lBT+65cn.net] *nullptr
492 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 17:41:01.80 ID:krkmojOq.net] >>475 参照は何も参照していない状態というのは作れない。 参照で受け取るように書いてあればその参照が無効ということはあり得ないという表明として解釈するのが通例。 (実際にはダングリング参照はあり得るけどそれは単に間違ったプログラムなので気にしない。) 引数として不要なのであればオーバーロードで引数が不要な関数も用意するのが真っ当な方法だけれど、 どうしても無効ということを表す状態を渡したいということであればダミーのオブジェクトを作っておいて それを無効の意味に使うという方法は考えられる。 (不格好だけど……。) #include <iostream> struct A {}; A dummy; void hoge(int& p1, A& p2 = dummy) { if(&dummy == &p2) std::cout << "p2 is dummy" << std::endl; else std::cout << "p2 is not dummy" << std::endl; } int main(void) { int foo = 1; A bar; hoge(foo, bar); hoge(foo); } あるいは std::variant と std::monostate と std::ref を組み合わせれば表現できなくもないかなぁ……。
493 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:45:03.34 ID:UD2fraRe.net] NullObjectパターンすね
494 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:48:18.95 ID:lBT+65cn.net] hoge(p1,* static_cast<A*>(nullptr));
495 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:49:14.63 ID:3jRalumJ.net] >>476 *(A *)nullptr にしないとエラーになるな そいで関数側で&p2==nullptrでnullptrが渡されたかどうかチェックできるね でもこんなの許されてるの?
496 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 17:52:23.11 ID:krkmojOq.net] >>476 >>480 当然だけど (空ポインタを含めて) 無効なポインタをデリファレンスしたらその時点で未定義。
497 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 19:00:16.73 ID:lBT+65cn.net] 何いってんだ キチンと動作する ただの参照なんだから未定義じゃないだろ 他の変数に受け渡してるワケでもないし
498 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 19:59:32.04 ID:krkmojOq.net] >>482 実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、 言語仕様上において * の適用を無かったことに出来るわけではない。 (C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
499 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 20:26:29.70 ID:SwNxahaG.net] また未定義動作なんか怖くない君か 命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
500 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 20:32:26.64 ID:7rL/DhC7.net] 1. 参照をやめてポインタにする 2. std::optional<T>を使う(C++17以降) 俺ならこのどっちか
501 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:18:37.99 ID:bhHmmGon.net] クラスTが自作クラスなら Tにnulを意味するlオブジェクトを定義すれば良い…… >>477 なdummyオブジェクト方式はテンプレートの中で使いにくくなるいはず >>485 なstd::optional<T>案はどうせ余計な記憶を要するのだからT固有のnullを定義するうのとイーブン
502 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:24:32.10 ID:bhHmmGon.net] もちろんT固有のnull「値」の定義においては オブジェクトの参照 == null値、 はアドレスの一致ではなく値の一致として解釈されねばならな い
503 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:44:53.78 ID:bhHmmGon.net] さもないと、クラスTのnull値をT_NULLみたいな名前にしたとして、 T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL }; みたいなことができないか らな
504 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 00:36:12.25 ID:meWA0K5y.net] >>480 ,482 gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。 https://wandbox.org/permlink/c9QQIkFRPpFHd7rL
505 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 00:55:04.49 ID:E9G/hK4q.net] void hoge(int& p1, optional<A>& p2 = nullopt) { // constじゃないのでエラー みたいなことってoptionalで上手いことやる方法ないの? 呼び出し元は int i; A a; hoge(i, a); hoge(i); みたいな感じで 書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
506 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:23:25.11 ID:V3EBITWg.net] なにいってんだおめ
507 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:31:37.67 ID:V3EBITWg.net] nullopt以外が渡されたらそのA&に対して、 nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと? それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
508 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:49:32.28 ID:E9G/hK4q.net] 伝わらないようなので、コード書きました https://wandbox.org/permlink/HyOX0jEBR4glCT01
509 名前:はちみつ餃子 mailto:sage [2021/10/06(水) 03:08:52.59 ID:3d8zh1Pt.net] >>493 やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。 しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。 コードにしたらこんな感じ。 https://wandbox.org/permlink/qEaoGDWFh7LmzE4m
510 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 06:31:33.91 ID:lNsYT/rw.net] 部分特殊化できないのは関数テンプレートだよな template<class T1, class T2> struct test { void fig1(); void fig2(); void fig3(); }; template< > void test<void, void>::fig1(); //ok template<class T1> void test<T1 , void>::fig2(); //error template<class T2> void test<void, T2 >::fig3(); //error クラステンプレートなのに弾かれるのは何で?
511 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 06:43:32.28 ID:Cv4NDZSF.net] その部分特殊化されたtest(構造体)が定義されてないからだね 先にtestの部分特殊化を書けば通る
512 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 07:59:10.51 ID:E9G/hK4q.net] >>494 std::reference_wrapperは知りませんでした std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので 実質無理ってことなのかなぁと思いますが… ありがとうございます
513 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:17:01.00 ID:fON1wZ9Y.net] >>475 普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。 nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
514 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:26:08.77 ID:E9G/hK4q.net] >>497 自己レスです いずれにしても呼び出し元を変更せずに要件を満たせそうな唯一の方法っぽいので解決ですね (私は>>475 ではありません)
515 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:34:45.86 ID:4yqQ2QZ4.net] 今は継承はなるべく使わない、がデフォなのかな
516 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:11:04.83 ID:lTl3I+RT.net] クラステンプレートがナウい
517 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:13:14.40 ID:lTl3I+RT.net] とはいえ、いきなりテンプレートにするのはハードル高いので、 結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
518 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:41:21.39 ID:DE23Rkof.net] >>498 > 普通はオーバーロードだな。 これに一票
519 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 10:03:37.43 ID:7OUEgWer.net] >>489 gcc7でも-O2つけるとダメだね つけなきゃ一致するけど
520 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 10:45:35.19 ID:Cv4NDZSF.net] デフォとかナウいとかアホかと
521 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 12:20:32.60 ID:iqYhGyd9.net] 最適化オプションの違いで挙動が変わるようなコードはそもそもダメだって理解してくれよ
522 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 13:11:05.10 ID:BBSbIN5v.net] インテルコンパイラはもう規格満たしてないだろってくらい滅茶苦茶に挙動を変える gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う
523 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 05:56:22.58 ID:Xasiu/5n.net] >>496 遅レスすまそ testなら部分特殊化できるのはわかるんだが その場合クラス定義の全部を書き直すよな template<class T1> struct test<T1, void> { void fig1(); void fig2(); //特殊化したいのはここだけ void fig3(); }; fig1とfig3を一次テンプレートと同じ内容で 書き直さにゃならんかね
524 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 23:05:08.47 ID:xNy0cJty.net] 関数テンプレート内でラムダ式使おうとしたらコンパイルできない template<class T> void hoge(){ auto func = [](){return 0;}; } int main(){ hoge<int>(); return 0; } in instantiation of function template specialization 'hoge<int>' requested here と出るが、何がだめなのかよくわからん
525 名前:はちみつ餃子 mailto:sage [2021/10/08(金) 23:18:07.74 ID:ZAq25yo3.net] >>509 そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」 というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない? func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。 警告をエラー扱いにするオプションを付けてたりしない?
526 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 23:23:01.42 ID:awgtN1Ul.net] C+pod https://toyota.jp/cpod/images/sec1-sld-img2.jpg
527 名前:はちみつ餃子 mailto:sage [2021/10/08(金) 23:28:30.45 ID:ZAq25yo3.net] >>511 C++20 では std::is_pod や POD の概念自体が非推奨になってるぞ。 次あたりでは廃止されるんとちゃうか。
528 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:11:49.30 ID:PhB5rfBq.net] あるラムダ式が他のラムダ式をコピーするとき、参照キャプチャにするかコピーキャプチャにするか迷うんですが、皆さんはどういう基準で決められてますか
529 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:14:22.61 ID:yAn344zh.net] https://ideone.com/wq0CY8 やたーセマフォできたよ。 これバグってるかな?
530 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:17:39.52 ID:yAn344zh.net] >>513 コピーキャプチャはコピーなので、それ相応のリソースを食う。 基本は参照キャプチャにしている。
531 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 01:44:21.88 ID:qGt3mQky.net] 破壊的代入の余地が無いようする つまりコピーを第一の選択肢として考えるする
532 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 01:50:32.12 ID:qGt3mQky.net] *thisはさすがに参照にすることが多いが(だいたいコピコンがあるとも限らないし、 とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、 参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う 入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない
533 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 04:41:44.62 ID:/ScOmKIj.net] >>516 だとすると一番効果的なのは C++でコード書くこと自体をやめることだな あんたの場合は
534 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 07:01:43.04 ID:H3uBjuzu.net] >>516 コピーキャプチャが第一選択肢という結論は分かるが それ以外の説明が完全に意味不明
535 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:28:13.64 ID:lWUpu20f.net] 意図しない破壊を防ぐにはキャプチャしなきゃいいだけ それを参照のせいにするゴミはプログラマの資質がない
536 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:31:55.66 ID:MbdCJRMe.net] とりあえずで[&]で書いてるな 丁寧にやりたければ変数ごとに考えて明示する
537 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:34:15.67 ID:lWUpu20f.net] コピーのコストに無頓着なやつは11以後のC++に向かないな
538 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:09:31.41 ID:B/tc3JZb.net] スレッド立ち上げるとかファイル書くとかクソ重い操作が伴う時にコピーコスト気にしてもしょうがない 場合によるとしか
539 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:37:13.21 ID:2ZvzU42q.net] どこでも使う汎用性高いものなら問題が起きる前に[=]にしてる 逆に[&]はよほど安全だと思わない限り使わない
540 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:45:00.67 ID:qGt3mQky.net] >>522 スレッドセーフをどう保証するかに無頓着な香具師はマルチスレッドプログラミングに向かんわ >>518 、>>519 低レベルなレスどうも ラムダ式の成り立ちを知らなかったり どのように使われるか想像できなかったり 使ったこと無いんじゃね;;;
541 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:59:19.31 ID:lWUpu20f.net] >>525 スレッドがどうたらはおまえさんが勝手に言い出したことで元質問にはない まさかとは思うがコピーしてりゃスレッドセーフなんて主張はしてないよな
542 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:13:11.28 ID:qGt3mQky.net] ラムダ式は一般にラムダ式を定義したスコープの外に持ち出され、予見できないタイミングで使われうる 参照キャプチャだと (1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない (2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない とゆー2条件をクリアする必要がある。 コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要 参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!
543 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:14:48.07 ID:qGt3mQky.net] >>526 ラムダ式、が含意する事柄について不十分な理解なレスktkr、 危険プログラマー認定のレベル3ぐらいやな;;;
544 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:18:00.19 ID:B/tc3JZb.net] >>527 ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても
545 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:28:18.85 ID:2ZvzU42q.net] 遅延評価されるものはよくコンテナに入れて後でぶん回されるから・・・
546 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:28:30.83 ID:qGt3mQky.net] >>529 定義するのと使う(評価する)のを同じスコープ内でやるならラムダ式使うまでもないじゃん? ていうか使うまでもないんですよ >>529 はアレな人?
547 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:38:17.37 ID:QniiN4Lz.net] スコープ内の変数をキャプチャする処理をスレッドで動かす場合は普通にラムダ式を使うと思うが。
548 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:39:34.18 ID:B/tc3JZb.net] >>531 はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの? std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});
549 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:57:37.17 ID:tv4afNG+.net] みなさんスレッドセーフにしたいときはスレッドセーフになる様に書きましょう
550 名前:ハノン mailto:sage [2021/10/10(日) 12:13:39.02 ID:KKHdhYPj.net] >>522 11以前でも
551 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:21:43.80 ID:Ld3aFVRt.net] 任意のスレッド安全性を実現するのはゼロコストでは不可能だから 必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある
552 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:31:34.49 ID:6/7jGiIK.net] std::conj() に double を渡したら std::complex<double> にキャストされるのが嫌なので、double を渡したら何もしないで double を返し、std::complex<double> を渡したら std::conj() と同じ動作をするオーバーロード関数 conj() を作ろうかと思うのですがアリですか? なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください
553 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:36:51.51 ID:2ZvzU42q.net] こここ・・こういうこと? (A)キャプチャが必要でスコープ内で実行までされるケース (B)キャプチャが必要でスコープ外まで実行が遅延されるケース (B-1)ラムダ式生成時と実行スレッドが同じケース (B-2)ラムダ式生成時と実行スレッドが違うケース (A)なら全員「[&]で問題があるケースはない」と考えている (B-1)は好みが別れているところ (B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み [&]と[=]がよく分からない人はコチラ https://ideone.com/OQS113 以下個人的意見 スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている ようはコピーするコストをそれほど高くは見積もっていない
554 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 14:46:42.08 ID:lWUpu20f.net] >>528 日本語でおk
555 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:03:29.39 ID:lWUpu20f.net] >>538 おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな
556 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:49:17.57 ID:2ZvzU42q.net] >>540 う〜ん、伝わらないですね・・・ 共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ
557 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:51:53.70 ID:lWUpu20f.net] だから共有=リスクなんだろ? もうマシンも別の実機にすれば最強防御じゃん
558 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:01:53.15 ID:2ZvzU42q.net] >>542 残念ですが理解してもらうことは諦めます
559 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:32:07.51 ID:qGt3mQky.net] >>533 頭の中がgdgdな人が話をgdgdにしようとしていまつね…… std::sort()の呼び出しと同じスコープが終わった後に [](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、 [](int a, int b)のスコープが限定されるために担保されているわけではないし、 [](int a, int b)がラムダ式だから担保されているわけでもないの。 つまり、>>533 は >ラムダ式をスコープ外に持ち出すなんてレアケース(>>529 ) の根拠に全くなっていないワケ
560 名前:はちみつ餃子 mailto:sage [2021/10/10(日) 17:47:25.28 ID:cCUvKLuJ.net] レアケースがどうこういったところでレアケースなら考えなくていいってわけでもない。 そんなの個別の事例ごとに考えるしかしょうがないだろう。
561 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:56:25.23 ID:lWUpu20f.net] >>543 無理筋の主張ってことがわかってもらえたならいいよ
562 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:04:09.07 ID:2ZvzU42q.net] >>546 無理筋ではありませんよ スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました 今更その手法自体を想像できない人に、こんなところで説明するのは困
563 名前:なだけです [] [ここ壊れてます]
564 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:11:49.41 ID:lWUpu20f.net] おまえさんの言う「大昔」がどのくらいか知らんが 俺が若手の頃はRENT,REUSなんてやってたよ
565 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:25:30.38 ID:Euz3vWgQ.net] ラムダ式によって作られたオブジェクトがキャプチャされたオブジェクトより長生きする可能性があるならコピーキャプチャ そうでなくともレジスタに乗ると思われるならコピーキャプチャ そうでない場合に初めて参照キャプチャ 排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが…… いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき
566 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 21:19:12.50 ID:MbdCJRMe.net] ラムダ式関連でいうと参照とかコピーをデフォルトだけで指定したときも実際に使ったものの分しかクロージャオブジェクトのサイズに乗ってこないと思ってるんだけどヤバい?
567 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 23:42:34.57 ID:9PtWfEC6.net] >>550 むしろ他に何が乗ると思っているのか? 気になるなら生成コード見て確認すればいいだろうとも思うし。
568 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 23:58:18.57 ID:2ZvzU42q.net] >>548 大昔とは1990年頃の話です COBOLなのか知りませんが、reentrantとreusableは今回の話と直接関係ありません
569 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 02:51:41.68 ID:1CVjhT+M.net] >>551 cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった
570 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 05:43:06.87 ID:FIUH1xZN.net] >>552 関係大ありだよ あの当時はアセンブラでC++は使ってなかったというだけだ わかってないのおまえさんだな
571 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 07:43:50.36 ID:M/9mFHzI.net] >>554 説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ
572 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 07:52:27.26 ID:pMbZgi1h.net] >>555 おまえさんがどう思おうと勝手だが センターオウンコーディングとかやってたよ マウント取られる気が全くしねえぜ
573 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 08:08:27.81 ID:M/9mFHzI.net] >>556 マウント取る取らないとかどうでもいいです あなたが理解できないのをどうにもできないだけなんです
574 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 08:46:34.77 ID:pMbZgi1h.net] と言うことにしたいのですね
575 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 09:17:45.21 ID:G+wdAsto.net] リエントラント目指してもいいじゃないの
576 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 09:58:01.98 ID:F+cmXQty.net] クラスの型を自動変換して関数に入れるにはどうすればいいですか?例えば、 class A { public: double hoge; }; class B { public: int hogehoge; }; int function(A aaa); があった時に、functionにB型を入れても動くようにしたいです。 クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、 実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
577 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:22:18.86 ID:T3qmZxdk.net] >>560 Bを受け付けるfunctionを書くんや
578 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:50:11.05 ID:QW1mycSW.net] B extends A としたら function の引数をキャスト?で動かない?
579 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:54:01.94 ID:RUUSz/4T.net] 簡単や template<class A> int function(A aaa);
580 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 12:11:05.48 ID:F+cmXQty.net] できました。ありがとうございます。 また、ポインタのvectorを実体として使うにはどうすればよいでしょうか? std::vector<A*> で定義されてるものを、 std::vector<A>として使いたいです。 別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
581 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 12:31:51.97 ID:T3qmZxdk.net]
582 名前:参照を使うんや [] [ここ壊れてます]
583 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 13:03:47.84 ID:NaSXzxBw.net] 参照のvectorなんて作れたっけ?
584 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 13:16:00.26 ID:T3qmZxdk.net] reference_wrapper使うんや まあ下らんこと考えんほうがええ
585 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 17:28:01.69 ID:0Mn4AOx6.net] >>564 ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。 具体的にはstd::vector<*A>を std::vector<std::shared_ptr<A>> にして、shared_ptr<A>をやり取りするようにすべきだな。 性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
586 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 20:43:04.76 ID:bPHZE8G4.net] 言ってることは同意だが、ポインタの型もまともに書けないような人に言われても説得力がない
587 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 20:47:36.58 ID:c9XBGwkD.net] Rustと間違えたんじゃね
588 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 22:25:40.15 ID:RUUSz/4T.net] 簡単や std::vector<std::shared_ptr<A>>
589 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 23:13:38.91 ID:9gfKW03X.net] ドラクエ3のバージョン違いの謎に迫る! https://www.youtube.com/watch?v=sh5GXYs6T1c 2021/10/01に公開済み FC版DQ3には、AバージョンとBバージョンが存在する 今回はROM内のプログラムを徹底比較! どこが違うのか白黒ハッキリさせると息巻いた内藤プロ 当時自分が作ったのに全て忘れてて大変なことに・・
590 名前:デフォルトの名無しさん [2021/10/12(火) 04:13:48.50 ID:jMkI4z1q.net] ぶっちゃけ継承とかポリモフィズムはオワコンでテンプレート最強?
591 名前:はちみつ餃子 mailto:sage [2021/10/12(火) 04:25:26.30 ID:WB1ScBpO.net] >>573 過去の C++ の流行においては継承が強調されすぎたこともあって 継承の害悪な面も見えて大幅な揺り戻しは有った。 しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。 バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。 結局のところそれぞれを適切に使えというだけのこと。
592 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 06:45:14.85 ID:LoAbYEbi.net] 継承が有効に使われている事例をひとつも知らないヒヨっ子丸出しな質問だな テンプレートの何がいいのかもわかってなさそう
593 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 07:03:36.18 ID:bL2VfUhD.net] CRTPとか見たら脳を壊しそう
594 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 07:24:36.11 ID:+oJUuDWk.net] >>576 virtual使えないor使わない処理系で、使ってみたけど確かに頭にスッキリ入らんパターンだわw あれはあれでポイントで使うと便利だし、反対にやっぱvirtualも便利でいいよねーとか。
595 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 08:16:42.08 ID:4AIb2U7h.net] >>573 メソッド共通化を実現するための継承はオワコン。 プレースホルダーを用意するための継承は現役。 総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
596 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 08:20:36.96 ID:vDVhyOYS.net] 耳が腐る
597 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 09:51:23.11 ID:kjIGaWla.net] 何でこんな荒れてんの?
598 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 10:09:23.54 ID:qN1bonoC.net] いつものこと
599 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 10:40:17.54 ID:kjIGaWla.net] 単発荒らしか
600 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 04:27:45.44 ID:yxtzEQdj.net] void * の生ポが最強
601 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 07:29:48.53 ID:w2mbz/VV.net] ○○なんていらねーよ害悪だけだ まだ使ってるやつは全員バカ これからは△△を使うべきだ なーんて言っちゃってマウント取った気になってるおめでたいやつ メガトン級にアホにされてることに気付かねえよな
602 名前:デフォルトの名無しさん [2021/10/13(水) 09:41:39.46 ID:V99uCirA.net] vector を shuffle する場合について質問です(gcc/windows10でテスト) vector<int> vec(50, 0); for(int i = 0; i < 10; ++i) vec[i] = 1; random_device dev_seed; mt19937_64 mt(dev_seed()); shuffle(vec.begin(), vec.end(), mt); で確かに shuffle されているのですが疑問点がいくつかあります 1.dev_seed()が毎回同じ値を返してる? (random_deviceの使い方を間違えてる?) 2.先頭の値が1に偏ってる? (shuffle() を数回繰り返す解決方法もあるようですがあまり気持ち良くないです) 3.そもそもforで先頭の方に1を入れる発想が良くない? (shuffleされてるならこれは関係無いと思いたい)
603 名前:デフォルトの名無しさん [2021/10/13(水) 09:47:25.08 ID:V99uCirA.net] ああこれか https://cpprefjp.github.io/reference/random/random_device.html >GCC (MinGW): GCC 9.1までは擬似乱数生成器 mt19937 を用いるため使用を推奨しない。詳細は備考欄を参照。GCC 9.2からは暗号論的な乱数である rand_s を使用する。
604 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 10:51:16.02 ID:ocY7/s3a.net] 偏りを判断する目が偏ってるのでは
605 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 12:39:29.13 ID:L2HfUVD6.net] random_deviceがダメな環境でrdtsc命令使ったことあるな 良いやり方かは知らん
606 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 16:09:05.50 ID:SuRXriSW.net] https://cpprefjp.github.io/ って https://ja.cppreference.com/ があるのになんで使われてるの?
607 名前:はちみつ餃子 mailto:sage [2021/10/13(水) 16:23:55.69 ID:6cp7j/AO.net] >>589 前者は編集者による解説なども含んでいて仕様の意図や習慣がわかりやすい。 実装の現実みたいな補足もあるし。 後者は仕様書の再編を指向してるから正確だけど規則の羅列を読むのがしんどいこともある。 適宜使い分けて。
608 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 16:49:55.63 ID:SuRXriSW.net] >>590 ありがとう
609 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 00:25:54.44 ID:unU20Liw.net] 逆にjaはほぼ見ないな cpprefjpかen
610 名前:デフォルトの名無しさん [2021/10/14(木) 17:38:44.33 ID:0xmYH4RJ.net] みんなで広げよう友達の輪 https://github.com/cpprefjp/cpprefjp.github.io
611 名前:デフォルトの名無しさん [2021/10/14(木) 19:08:30.88 ID:D5VUtH01.net] 今までJavaでやってきたけどC++もやってみたいんだよね すぐ出来るようになると思う?
612 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:10:28.43 ID:u3valL3D.net] >>594 ならない C言語のポインタや文字列について勉強したほうがいい
613 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:12:47.65 ID:pMO89bX6.net] >>594 c++でちょっとした文字列パースして内容に応じたオブジェクト構築する処理書いてたの、 ほぼ使ったことないJavaに移植したらスゲー早く出来てワロタ。C#もサクサクできたな〜 逆は色々イラッとするんじゃねぇかな?
614 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 01:29:52.42 ID:oSpeFu2A.net] 元々C++はその辺の文字列処理を毎回1からゴリゴリ書くような言語じゃなくて何らかのライブラリを利用するものだと思うけど、 クロスプラットフォームで各種文字コードが自由に扱えて、c++11以降の仕様に対応してて、かつかゆいところに手の届くライブラリって意外とないんだよね いや、俺が知らないだけかもしらんけどw
615 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 05:56:29.15 ID:JZ8LRo6T.net] 実質的な標準と呼べるものは今もないよ
616 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:26:39.59 ID:c8xS1fS2.net] >>596 std::regex使ってようやっと、かね。 c++はいつまでたっても文字列処理苦手なままだわ。
617 名前:デフォルトの名無しさん [2021/10/15(金) 10:21:28.25 ID:Sjupi756.net] Javaから入ると不能(陰ポ)になる もう手遅れ
618 名前:デフォルトの名無しさん [2021/10/15(金) 10:22:26.59 ID:Sjupi756.net] >>597 wxWidgets
619 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 10:26:50.27 ID:Eg3Mb3n8.net] あれ出来上がるバイナリ重すぎなんだけど、今は違ったりするのかね
620 名前:デフォルトの名無しさん [2021/10/15(金) 11:49:16.16 ID:Sjupi756.net] Debugだとバカデカくなるけど Releaseは気にならないレベル (DLL除く)
621 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 11:53:45.11 ID:JZ8LRo6T.net] std::regexと等価なインターフェースを各々の正規表現ベンダーが用意してくれればいいんだが、それすら実現されていないお寒い状況
622 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:03:59.88 ID:XHojpqKh.net] >>599 その辺も無いわけじゃないんだけど、クラスの構造どうしようかとか、メモリ管理どうするかとか、 変態trmplateでパズルしてみようかとか、選択肢多い分考えることも多い部分で時間かけることが 多い所はあるなーって。それがC++使いたい動機の裏返しでもあるんだけど。 あと本人の問題120%だが、ボケて油断してると、エラー直すのにやたら時間かかったりで。 Javaとか詳しく知らん状態だから言えるのかもしれんけど、もうこうするしかネェってレールが 最初からあるような印象でした。つかオラクルのライセンス問題のほうがムズいw
623 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:19:11.94 ID:Q47teFml.net] 等価って図々しいだろ
624 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:34:03.36 ID:Ax3dDCZ3.net] std::regexみたいな文字コードというものがあることを知らない人間が作ってそうなものを標準だと思ってつかうのはやめたほうがいいと思います
625 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:53:35.21 ID:JZ8LRo6T.net] char8_tが導入されたんだからutf-8しばりでいいじゃない
626 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 13:14:36.67 ID:x+xcCYcO.net] なんか最近曖昧な上に突っ込む点多すぎる内容的にはどうでもいい話題が多くない?
627 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 13:33:42.62 ID:ma4A3Lrr.net] >>607 utf8限定ならそこそこ。 もうutf8がデファクトだから、内部処理はutf8に統一した方がいいよ。
628 名前:ハノン mailto:sage [2021/10/15(金) 19:29:27.64 ID:0K4QrynR.net] >>608 内部コードは utf-32 でやっているので、utf-32 縛りのほうがうれしいです‥
629 名前:デフォルトの名無しさん [2021/10/15(金) 19:56:39.74 ID:JZ8LRo6T.net] >>611 はぁ? std:::basic_regex<char8_t>、std::basic_:regex<char16_t>, std:::basic_regex<char32_t> のどれでも好きなの使えばいいじゃん
630 名前:デフォルトの名無しさん [2021/10/15(金) 20:01:47.12 ID:JZ8LRo6T.net] ところで、char16_t、char32_tってエンディアンはシステム依存しばり?
631 名前:デフォルトの名無しさん [2021/10/15(金) 20:03:20.51 ID:eqKsqNtm.net] ちなみに、いま使えるみたいですよ。 むかしは使えることになってるのに実際は使えなかったんだけど。 自作イテレーターにも対応してるようです。 アップルは知らんけど。 Ubuntu+gcc、Windows10+clでは自作イテレータでstd::regex<>が使えました。 これは、HTML、XML、JSONのデータ構造からコンテンツ内のみを検索のような事に使えます。 標準から外れるような議論もあるそうですが、便利なので外れないように抗議していきましょう。
632 名前:デフォルトの名無しさん [2021/10/15(金) 20:12:21.03 ID:eqKsqNtm.net] C++20でchar8_tが入ると便利になりますよね。
633 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 20:12:58.12 ID:Q47teFml.net] >>613 規定しない なのでそういうのはそこでは気にしない
634 名前:デフォルトの名無しさん [2021/10/15(金) 20:35:46.40 ID:eqKsqNtm.net] STLはセントルイスの略。 では、GCCは何処でしょう?
635 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 20:50:28.66 ID:R98eOYn2.net] つまんね
636 名前:デフォルトの名無しさん [2021/10/15(金) 21:40:43.65 ID:HBylJ5Wv.net] 平面3リンクマニュピュレータの逆運動学のプログラミングが分かりません。 キーボードで手先の位置を入力すると、関節角が表示されるようにしたいです。 scanfを使うのと、アームの長さなどは適当に決めていいという条件です。 わかる方いたら、送って欲しいです。
637 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 22:21:16.57 ID:fUsvamq4.net] >>619 どこの大学のなんていう授業か教えてくれたら送ってあげる
638 名前:デフォルトの名無しさん [2021/10/15(金) 22:41:19.44 ID:HBylJ5Wv.net] 大した大学ではないです。ロボット工学です。
639 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 10:16:02.78 ID:pBeCkfuy.net] >>619 冗長マニピュレータで一意に求まらん。制約条件設けてるはずだが。
640 名前:デフォルトの名無しさん [2021/10/16(土) 11:55:15.40 ID:NekA8urB.net] >>622 リンクの長さは良さそうな値を定義してください。関節の座標はこちらで決めずにあくまでも手先の位置・姿勢であるxed、yed、φedから計算で出します。解が複数出てくるので、全ての候補を求めてください。 例えば、リンクの長さは根元から順に0.3m、0.3m、0.05mなどで良いです。 プログラムとしては手先の目標値を入力して、θ1、θ2、θ3が出力されればOKです。
641 名前:デフォルトの名無しさん [2021/10/16(土) 12:05:17.39 ID:NekA8urB.net] >>622 目標値は、x=0 y=0.3m φ=90degがいいと思います。先ほどのリンクの長さの設定値で楽な姿勢でロボットの手が届く範囲ですので。
642 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 12:08:52.99 ID:pBeCkfuy.net] >>623 手の姿勢まで指定してて >>619 と違う問題になってんじゃん。どんなテキストにも解法載ってる問題丸投げしてんだな。
643 名前:デフォルトの名無しさん [2021/10/16(土) 12:14:57.04 ID:NekA8urB.net] >>625 テキストに載ってないからここで質問してるんですよ。手の姿勢は例えばの話ですよ。どっちみちscanfで入力するんですから。
644 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 12:22:50.77 ID:pBeCkfuy.net] >>626 問題が違うっつうの。 ロボット工学のテキストには必ず載ってる。よく読めアホ。
645 名前:デフォルトの名無しさん [2021/10/16(土) 12:35:46.33 ID:NekA8urB.net] >>627 日本語分かる?プログラムは載ってないから。教科書に載ってるから見ろって丸投げしてんのどっちだよ。
646 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:20:33.97 ID:N8k1BZc2.net] >>628 お前だよどう考えても
647 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:59:18.07 ID:Ilt9CI+j.net] 答える価値がないと思うなら放置しろよ くだらねえ煽りやってんな迷惑だ
648 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:12:30.56 ID:pBeCkfuy.net] >>628 プログラムが載ってるわけねえだろ、アホ。 載ってんのは**解法**(>>625 )
649 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:15:24.70 ID:1x8IpOH2.net] > どっちみちscanfで入力するんですから。 このレガシーさには誰も何も思わんの?笑
650 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:21:35.71 ID:gJanIysk.net] ssfanf_s()を使った方が(%sとかについて)ちょっと安全
651 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:31:10.24 ID:ex7yhveJ.net] 安全性の話じゃねえだろ
652 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:53:50.46 ID:EatL4YvD.net] わざわざC++なんか使っときながら勉強不足でモロアンチパターン踏んでるバカ よくいるよね
653 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:09:18.72 ID:n5lzAHDj.net] どういうの?
654 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:14:18.41 ID:gJanIysk.net] やっぱ普通fgets()して1行全体を読み込んでからstrtok_s()使いマスヨネー
655 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:16:29.16 ID:gJanIysk.net] 文字列の数値化はstrtol()、strtoul()、strtof()、strtod()をオーバーロードしたwrapper関数を呼ぶテンプレートにすれば cinと同等の型安全性と同等以上の使い勝手が実現にできるし、
656 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:41:33.15 ID:VgkITY1O.net] C++な人ってゴリゴリ自分でBNF的なparser combinator書くイメージだな わざわざcstring使う人はいない気がする
657 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:45:41.19 ID:gJanIysk.net] いろんな人の手を経たプロジェクトだと CString(Windows) と std::string (ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ
658 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:46:44.02 ID:VgkITY1O.net] えーっと・・・cstringはC言語のstring.hのことだよ
659 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:53:12.21 ID:gJanIysk.net] しらそん いちいち #ifdef __clusplus # include <cstring> # include <cmath> #else # include <string.h> # include <math.h> #endif みたいな書き方するん会、
660 名前:デフォルトの名無しさん [2021/10/16(土) 23:54:09.02 ID:6ga3nra2.net] json文字列として入力データを受け取って既存のjsonライブラリでパースするのが無難じゃないですかね
661 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:22:32.00 ID:4Zt4uwKf.net] C++でfgets使うアホの世界チャンピオンがいるな
662 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:40:16.91 ID:Rn6uB4uI.net] 壊れても居ないものを直そうとするヴァカに言われたくはないし、 行の長さが定まっていないみたいなアフォな外部データ設計でない限り fgets()で軽くて十分
663 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:48:08.24 ID:4Zt4uwKf.net] 直すって何を? ああ、おまえさんの頭か
664 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:05:04.47 ID:cds0CTiX.net] 今ならメモリ不足とか気にする必要はほぼないから、 fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね
665 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:06:37.70 ID:XrR+wpGu.net] MSVCのfgetc()とfgets()は実行速度が遅い
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 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています