1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net] 前スレ C++相談室 part156 https://mevius.5ch.net/test/read.cgi/tech/1621389313/
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 スレッドがどうたらはおまえさんが勝手に言い出したことで元質問にはない まさかとは思うがコピーしてりゃスレッドセーフなんて主張はしてないよな