前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
探検
C++相談室 part157
■ このスレッドは過去ログ倉庫に格納されています
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
482デフォルトの名無しさん
2021/10/05(火) 19:00:16.73ID:lBT+65cn 何いってんだ
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし
483はちみつ餃子 ◆8X2XSCHEME
2021/10/05(火) 19:59:32.04ID:krkmojOq >>482
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
484デフォルトの名無しさん
2021/10/05(火) 20:26:29.70ID:SwNxahaG また未定義動作なんか怖くない君か
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
485デフォルトの名無しさん
2021/10/05(火) 20:32:26.64ID:7rL/DhC7 1. 参照をやめてポインタにする
2. std::optional<T>を使う(C++17以降)
俺ならこのどっちか
2. std::optional<T>を使う(C++17以降)
俺ならこのどっちか
486デフォルトの名無しさん
2021/10/05(火) 22:18:37.99ID:bhHmmGon487デフォルトの名無しさん
2021/10/05(火) 22:24:32.10ID:bhHmmGon もちろんT固有のnull「値」の定義においては
オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな
い
オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな
い
488デフォルトの名無しさん
2021/10/05(火) 22:44:53.78ID:bhHmmGon さもないと、クラスTのnull値をT_NULLみたいな名前にしたとして、
T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな
T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな
489デフォルトの名無しさん
2021/10/06(水) 00:36:12.25ID:meWA0K5y >>480,482
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
https://wandbox.org/permlink/c9QQIkFRPpFHd7rL
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
https://wandbox.org/permlink/c9QQIkFRPpFHd7rL
490デフォルトの名無しさん
2021/10/06(水) 00:55:04.49ID:E9G/hK4q void hoge(int& p1, optional<A>& p2 = nullopt) { // constじゃないのでエラー
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
491デフォルトの名無しさん
2021/10/06(水) 01:23:25.11ID:V3EBITWg なにいってんだおめ
492デフォルトの名無しさん
2021/10/06(水) 01:31:37.67ID:V3EBITWg nullopt以外が渡されたらそのA&に対して、
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?
それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?
それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
493デフォルトの名無しさん
2021/10/06(水) 01:49:32.28ID:E9G/hK4q 伝わらないようなので、コード書きました
https://wandbox.org/permlink/HyOX0jEBR4glCT01
https://wandbox.org/permlink/HyOX0jEBR4glCT01
494はちみつ餃子 ◆8X2XSCHEME
2021/10/06(水) 03:08:52.59ID:3d8zh1Pt >>493
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
https://wandbox.org/permlink/qEaoGDWFh7LmzE4m
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
https://wandbox.org/permlink/qEaoGDWFh7LmzE4m
495デフォルトの名無しさん
2021/10/06(水) 06:31:33.91ID:lNsYT/rw 部分特殊化できないのは関数テンプレートだよな
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
クラステンプレートなのに弾かれるのは何で?
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
クラステンプレートなのに弾かれるのは何で?
496デフォルトの名無しさん
2021/10/06(水) 06:43:32.28ID:Cv4NDZSF その部分特殊化されたtest(構造体)が定義されてないからだね
先にtestの部分特殊化を書けば通る
先にtestの部分特殊化を書けば通る
497デフォルトの名無しさん
2021/10/06(水) 07:59:10.51ID:E9G/hK4q >>494
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます
498デフォルトの名無しさん
2021/10/06(水) 08:17:01.00ID:fON1wZ9Y >>475
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
499デフォルトの名無しさん
2021/10/06(水) 08:26:08.77ID:E9G/hK4q500デフォルトの名無しさん
2021/10/06(水) 08:34:45.86ID:4yqQ2QZ4 今は継承はなるべく使わない、がデフォなのかな
501デフォルトの名無しさん
2021/10/06(水) 09:11:04.83ID:lTl3I+RT クラステンプレートがナウい
502デフォルトの名無しさん
2021/10/06(水) 09:13:14.40ID:lTl3I+RT とはいえ、いきなりテンプレートにするのはハードル高いので、
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
503デフォルトの名無しさん
2021/10/06(水) 09:41:21.39ID:DE23Rkof504デフォルトの名無しさん
2021/10/06(水) 10:03:37.43ID:7OUEgWer505デフォルトの名無しさん
2021/10/06(水) 10:45:35.19ID:Cv4NDZSF デフォとかナウいとかアホかと
506デフォルトの名無しさん
2021/10/06(水) 12:20:32.60ID:iqYhGyd9 最適化オプションの違いで挙動が変わるようなコードはそもそもダメだって理解してくれよ
507デフォルトの名無しさん
2021/10/06(水) 13:11:05.10ID:BBSbIN5v インテルコンパイラはもう規格満たしてないだろってくらい滅茶苦茶に挙動を変える
gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う
gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う
508デフォルトの名無しさん
2021/10/08(金) 05:56:22.58ID:Xasiu/5n >>496
遅レスすまそ
testなら部分特殊化できるのはわかるんだが
その場合クラス定義の全部を書き直すよな
template<class T1>
struct test<T1, void>
{
void fig1();
void fig2(); //特殊化したいのはここだけ
void fig3();
};
fig1とfig3を一次テンプレートと同じ内容で
書き直さにゃならんかね
遅レスすまそ
testなら部分特殊化できるのはわかるんだが
その場合クラス定義の全部を書き直すよな
template<class T1>
struct test<T1, void>
{
void fig1();
void fig2(); //特殊化したいのはここだけ
void fig3();
};
fig1とfig3を一次テンプレートと同じ内容で
書き直さにゃならんかね
509デフォルトの名無しさん
2021/10/08(金) 23:05:08.47ID:xNy0cJty 関数テンプレート内でラムダ式使おうとしたらコンパイルできない
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
と出るが、何がだめなのかよくわからん
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
と出るが、何がだめなのかよくわからん
510はちみつ餃子 ◆8X2XSCHEME
2021/10/08(金) 23:18:07.74ID:ZAq25yo3 >>509
そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」
というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない?
func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。
警告をエラー扱いにするオプションを付けてたりしない?
そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」
というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない?
func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。
警告をエラー扱いにするオプションを付けてたりしない?
511デフォルトの名無しさん
2021/10/08(金) 23:23:01.42ID:awgtN1Ul512はちみつ餃子 ◆8X2XSCHEME
2021/10/08(金) 23:28:30.45ID:ZAq25yo3513デフォルトの名無しさん
2021/10/09(土) 21:11:49.30ID:PhB5rfBq あるラムダ式が他のラムダ式をコピーするとき、参照キャプチャにするかコピーキャプチャにするか迷うんですが、皆さんはどういう基準で決められてますか
514デフォルトの名無しさん
2021/10/09(土) 21:14:22.61ID:yAn344zh515デフォルトの名無しさん
2021/10/09(土) 21:17:39.52ID:yAn344zh516デフォルトの名無しさん
2021/10/10(日) 01:44:21.88ID:qGt3mQky 破壊的代入の余地が無いようする
つまりコピーを第一の選択肢として考えるする
つまりコピーを第一の選択肢として考えるする
517デフォルトの名無しさん
2021/10/10(日) 01:50:32.12ID:qGt3mQky *thisはさすがに参照にすることが多いが(だいたいコピコンがあるとも限らないし、
とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、
参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから
スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う
入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない
とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、
参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから
スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う
入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない
518デフォルトの名無しさん
2021/10/10(日) 04:41:44.62ID:/ScOmKIj519デフォルトの名無しさん
2021/10/10(日) 07:01:43.04ID:H3uBjuzu520デフォルトの名無しさん
2021/10/10(日) 09:28:13.64ID:lWUpu20f 意図しない破壊を防ぐにはキャプチャしなきゃいいだけ
それを参照のせいにするゴミはプログラマの資質がない
それを参照のせいにするゴミはプログラマの資質がない
521デフォルトの名無しさん
2021/10/10(日) 09:31:55.66ID:MbdCJRMe とりあえずで[&]で書いてるな
丁寧にやりたければ変数ごとに考えて明示する
丁寧にやりたければ変数ごとに考えて明示する
522デフォルトの名無しさん
2021/10/10(日) 09:34:15.67ID:lWUpu20f コピーのコストに無頓着なやつは11以後のC++に向かないな
523デフォルトの名無しさん
2021/10/10(日) 10:09:31.41ID:B/tc3JZb スレッド立ち上げるとかファイル書くとかクソ重い操作が伴う時にコピーコスト気にしてもしょうがない
場合によるとしか
場合によるとしか
524デフォルトの名無しさん
2021/10/10(日) 10:37:13.21ID:2ZvzU42q どこでも使う汎用性高いものなら問題が起きる前に[=]にしてる
逆に[&]はよほど安全だと思わない限り使わない
逆に[&]はよほど安全だと思わない限り使わない
525デフォルトの名無しさん
2021/10/10(日) 10:45:00.67ID:qGt3mQky526デフォルトの名無しさん
2021/10/10(日) 10:59:19.31ID:lWUpu20f527デフォルトの名無しさん
2021/10/10(日) 11:13:11.28ID:qGt3mQky ラムダ式は一般にラムダ式を定義したスコープの外に持ち出され、予見できないタイミングで使われうる
参照キャプチャだと
(1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない
(2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない
とゆー2条件をクリアする必要がある。
コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要
参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!
参照キャプチャだと
(1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない
(2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない
とゆー2条件をクリアする必要がある。
コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要
参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!
528デフォルトの名無しさん
2021/10/10(日) 11:14:48.07ID:qGt3mQky529デフォルトの名無しさん
2021/10/10(日) 11:18:00.19ID:B/tc3JZb >>527
ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても
ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても
530デフォルトの名無しさん
2021/10/10(日) 11:28:18.85ID:2ZvzU42q 遅延評価されるものはよくコンテナに入れて後でぶん回されるから・・・
531デフォルトの名無しさん
2021/10/10(日) 11:28:30.83ID:qGt3mQky532デフォルトの名無しさん
2021/10/10(日) 11:38:17.37ID:QniiN4Lz スコープ内の変数をキャプチャする処理をスレッドで動かす場合は普通にラムダ式を使うと思うが。
533デフォルトの名無しさん
2021/10/10(日) 11:39:34.18ID:B/tc3JZb >>531
はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ
std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの?
std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});
はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ
std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの?
std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});
534デフォルトの名無しさん
2021/10/10(日) 11:57:37.17ID:tv4afNG+ みなさんスレッドセーフにしたいときはスレッドセーフになる様に書きましょう
536デフォルトの名無しさん
2021/10/10(日) 12:21:43.80ID:Ld3aFVRt 任意のスレッド安全性を実現するのはゼロコストでは不可能だから
必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある
必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある
537デフォルトの名無しさん
2021/10/10(日) 12:31:34.49ID:6/7jGiIK std::conj() に double を渡したら std::complex<double> にキャストされるのが嫌なので、double を渡したら何もしないで double を返し、std::complex<double> を渡したら std::conj() と同じ動作をするオーバーロード関数 conj() を作ろうかと思うのですがアリですか?
なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください
なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください
538デフォルトの名無しさん
2021/10/10(日) 12:36:51.51ID:2ZvzU42q こここ・・こういうこと?
(A)キャプチャが必要でスコープ内で実行までされるケース
(B)キャプチャが必要でスコープ外まで実行が遅延されるケース
(B-1)ラムダ式生成時と実行スレッドが同じケース
(B-2)ラムダ式生成時と実行スレッドが違うケース
(A)なら全員「[&]で問題があるケースはない」と考えている
(B-1)は好みが別れているところ
(B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み
[&]と[=]がよく分からない人はコチラ
https://ideone.com/OQS113
以下個人的意見
スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている
ようはコピーするコストをそれほど高くは見積もっていない
(A)キャプチャが必要でスコープ内で実行までされるケース
(B)キャプチャが必要でスコープ外まで実行が遅延されるケース
(B-1)ラムダ式生成時と実行スレッドが同じケース
(B-2)ラムダ式生成時と実行スレッドが違うケース
(A)なら全員「[&]で問題があるケースはない」と考えている
(B-1)は好みが別れているところ
(B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み
[&]と[=]がよく分からない人はコチラ
https://ideone.com/OQS113
以下個人的意見
スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている
ようはコピーするコストをそれほど高くは見積もっていない
539デフォルトの名無しさん
2021/10/10(日) 14:46:42.08ID:lWUpu20f >>528
日本語でおk
日本語でおk
540デフォルトの名無しさん
2021/10/10(日) 16:03:29.39ID:lWUpu20f >>538
おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな
おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな
541デフォルトの名無しさん
2021/10/10(日) 16:49:17.57ID:2ZvzU42q >>540
う〜ん、伝わらないですね・・・
共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです
そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ
う〜ん、伝わらないですね・・・
共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです
そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ
542デフォルトの名無しさん
2021/10/10(日) 16:51:53.70ID:lWUpu20f だから共有=リスクなんだろ?
もうマシンも別の実機にすれば最強防御じゃん
もうマシンも別の実機にすれば最強防御じゃん
543デフォルトの名無しさん
2021/10/10(日) 17:01:53.15ID:2ZvzU42q >>542
残念ですが理解してもらうことは諦めます
残念ですが理解してもらうことは諦めます
544デフォルトの名無しさん
2021/10/10(日) 17:32:07.51ID:qGt3mQky >>533
頭の中がgdgdな人が話をgdgdにしようとしていまつね……
std::sort()の呼び出しと同じスコープが終わった後に
[](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、
[](int a, int b)のスコープが限定されるために担保されているわけではないし、
[](int a, int b)がラムダ式だから担保されているわけでもないの。
つまり、>>533は
>ラムダ式をスコープ外に持ち出すなんてレアケース(>>529)
の根拠に全くなっていないワケ
頭の中がgdgdな人が話をgdgdにしようとしていまつね……
std::sort()の呼び出しと同じスコープが終わった後に
[](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、
[](int a, int b)のスコープが限定されるために担保されているわけではないし、
[](int a, int b)がラムダ式だから担保されているわけでもないの。
つまり、>>533は
>ラムダ式をスコープ外に持ち出すなんてレアケース(>>529)
の根拠に全くなっていないワケ
545はちみつ餃子 ◆8X2XSCHEME
2021/10/10(日) 17:47:25.28ID:cCUvKLuJ レアケースがどうこういったところでレアケースなら考えなくていいってわけでもない。
そんなの個別の事例ごとに考えるしかしょうがないだろう。
そんなの個別の事例ごとに考えるしかしょうがないだろう。
546デフォルトの名無しさん
2021/10/10(日) 17:56:25.23ID:lWUpu20f >>543
無理筋の主張ってことがわかってもらえたならいいよ
無理筋の主張ってことがわかってもらえたならいいよ
547デフォルトの名無しさん
2021/10/10(日) 18:04:09.07ID:2ZvzU42q >>546
無理筋ではありませんよ
スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました
今更その手法自体を想像できない人に、こんなところで説明するのは困難なだけです
無理筋ではありませんよ
スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました
今更その手法自体を想像できない人に、こんなところで説明するのは困難なだけです
548デフォルトの名無しさん
2021/10/10(日) 18:11:49.41ID:lWUpu20f おまえさんの言う「大昔」がどのくらいか知らんが
俺が若手の頃はRENT,REUSなんてやってたよ
俺が若手の頃はRENT,REUSなんてやってたよ
549デフォルトの名無しさん
2021/10/10(日) 18:25:30.38ID:Euz3vWgQ ラムダ式によって作られたオブジェクトがキャプチャされたオブジェクトより長生きする可能性があるならコピーキャプチャ
そうでなくともレジスタに乗ると思われるならコピーキャプチャ
そうでない場合に初めて参照キャプチャ
排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う
RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが……
いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき
そうでなくともレジスタに乗ると思われるならコピーキャプチャ
そうでない場合に初めて参照キャプチャ
排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う
RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが……
いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき
550デフォルトの名無しさん
2021/10/10(日) 21:19:12.50ID:MbdCJRMe ラムダ式関連でいうと参照とかコピーをデフォルトだけで指定したときも実際に使ったものの分しかクロージャオブジェクトのサイズに乗ってこないと思ってるんだけどヤバい?
551デフォルトの名無しさん
2021/10/10(日) 23:42:34.57ID:9PtWfEC6552デフォルトの名無しさん
2021/10/10(日) 23:58:18.57ID:2ZvzU42q553デフォルトの名無しさん
2021/10/11(月) 02:51:41.68ID:1CVjhT+M >>551
cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった
cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった
554デフォルトの名無しさん
2021/10/11(月) 05:43:06.87ID:FIUH1xZN555デフォルトの名無しさん
2021/10/11(月) 07:43:50.36ID:M/9mFHzI >>554
説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ
説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ
556デフォルトの名無しさん
2021/10/11(月) 07:52:27.26ID:pMbZgi1h557デフォルトの名無しさん
2021/10/11(月) 08:08:27.81ID:M/9mFHzI558デフォルトの名無しさん
2021/10/11(月) 08:46:34.77ID:pMbZgi1h と言うことにしたいのですね
559デフォルトの名無しさん
2021/10/11(月) 09:17:45.21ID:G+wdAsto リエントラント目指してもいいじゃないの
560デフォルトの名無しさん
2021/10/11(月) 09:58:01.98ID:F+cmXQty クラスの型を自動変換して関数に入れるにはどうすればいいですか?例えば、
class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};
int function(A aaa);
があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};
int function(A aaa);
があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
561デフォルトの名無しさん
2021/10/11(月) 10:22:18.86ID:T3qmZxdk >>560
Bを受け付けるfunctionを書くんや
Bを受け付けるfunctionを書くんや
562デフォルトの名無しさん
2021/10/11(月) 10:50:11.05ID:QW1mycSW B extends A
としたら
function
の引数をキャスト?で動かない?
としたら
function
の引数をキャスト?で動かない?
563デフォルトの名無しさん
2021/10/11(月) 10:54:01.94ID:RUUSz/4T 簡単や
template<class A>
int function(A aaa);
template<class A>
int function(A aaa);
564デフォルトの名無しさん
2021/10/11(月) 12:11:05.48ID:F+cmXQty できました。ありがとうございます。
また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?
std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?
std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
565デフォルトの名無しさん
2021/10/11(月) 12:31:51.97ID:T3qmZxdk 参照を使うんや
566デフォルトの名無しさん
2021/10/11(月) 13:03:47.84ID:NaSXzxBw 参照のvectorなんて作れたっけ?
567デフォルトの名無しさん
2021/10/11(月) 13:16:00.26ID:T3qmZxdk reference_wrapper使うんや
まあ下らんこと考えんほうがええ
まあ下らんこと考えんほうがええ
568デフォルトの名無しさん
2021/10/11(月) 17:28:01.69ID:0Mn4AOx6 >>564
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。
性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。
性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
569デフォルトの名無しさん
2021/10/11(月) 20:43:04.76ID:bPHZE8G4 言ってることは同意だが、ポインタの型もまともに書けないような人に言われても説得力がない
570デフォルトの名無しさん
2021/10/11(月) 20:47:36.58ID:c9XBGwkD Rustと間違えたんじゃね
571デフォルトの名無しさん
2021/10/11(月) 22:25:40.15ID:RUUSz/4T 簡単や
std::vector<std::shared_ptr<A>>
std::vector<std::shared_ptr<A>>
572デフォルトの名無しさん
2021/10/11(月) 23:13:38.91ID:9gfKW03X ドラクエ3のバージョン違いの謎に迫る!
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み
FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み
FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・
573デフォルトの名無しさん
2021/10/12(火) 04:13:48.50ID:jMkI4z1q ぶっちゃけ継承とかポリモフィズムはオワコンでテンプレート最強?
574はちみつ餃子 ◆8X2XSCHEME
2021/10/12(火) 04:25:26.30ID:WB1ScBpO >>573
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。
しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。
しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。
575デフォルトの名無しさん
2021/10/12(火) 06:45:14.85ID:LoAbYEbi 継承が有効に使われている事例をひとつも知らないヒヨっ子丸出しな質問だな
テンプレートの何がいいのかもわかってなさそう
テンプレートの何がいいのかもわかってなさそう
576デフォルトの名無しさん
2021/10/12(火) 07:03:36.18ID:bL2VfUhD CRTPとか見たら脳を壊しそう
577デフォルトの名無しさん
2021/10/12(火) 07:24:36.11ID:+oJUuDWk578デフォルトの名無しさん
2021/10/12(火) 08:16:42.08ID:4AIb2U7h >>573
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。
総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。
総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
579デフォルトの名無しさん
2021/10/12(火) 08:20:36.96ID:vDVhyOYS 耳が腐る
580デフォルトの名無しさん
2021/10/12(火) 09:51:23.11ID:kjIGaWla 何でこんな荒れてんの?
581デフォルトの名無しさん
2021/10/12(火) 10:09:23.54ID:qN1bonoC いつものこと
582デフォルトの名無しさん
2021/10/12(火) 10:40:17.54ID:kjIGaWla 単発荒らしか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- アメリカ議会 「中国が台湾武力侵攻する準備を急速進展中」 ★2 [お断り★]
- 【高市自民】中国軍SNS 高市首相に怖すぎる地獄絵で警告、火の海の靖国神社「自ら墓穴を掘り、戻れない道へ進む」 [夜のけいちゃん★]
- 【速報】公然わいせつの疑いで逮捕・送検・略式起訴のAぇ! group 草間リチャード敬太メンバー 脱退を発表 「心の病の療養」に専念 [Ailuropoda melanoleuca★]
- 米国、台湾に7億ドル(1100億円相当)のウクライナで実戦検証済み高性能ミサイルを売却 1週間で2件目 [お断り★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 小野田紀美 経済安保相「悪いことをする外国人、日本にいない状況つくる」 [Hitzeschleier★]
- 【実況】博衣こよりのえちえちお子様ランチ🛸💜🥀🧪🍃★2
- 【男磨き】ハウスルール汁遊び禁止🈲🏡【ジョージメンズコーチ】
- 【悲報】イチゴ高騰で、ショートケーキからイチゴが消える🍰 [966095474]
- 奈良高専「ぼくらは、ほんとに負けたんでしょうか…」ロボコンで旭川1up周回作戦に敗北、涙ながらに語る。奈良OBからも疑問の声 [776365898]
- おさかなさんあつまれえ
- 政治アナリストがヤフコメ民を一蹴『議員報酬アップは悪くない。モチベーションの維持や不正防止に役立つ』 [315293707]
