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