C++相談室 part166 (769レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
720: デフォルトの名無しさん (アウアウウー Sa09-u8G0) [sage] 2025/10/22(水) 19:35:11.69 ID:t2Chdy11a ^^ ↑ちょっと顔にみえる http://mevius.5ch.net/test/read.cgi/tech/1745631298/720
721: デフォルトの名無しさん (ワッチョイ aa71-zeRK) [] 2025/10/22(水) 21:43:50.71 ID:q+0a8lK20 ^^; http://mevius.5ch.net/test/read.cgi/tech/1745631298/721
722: デフォルトの名無しさん (アウアウウー Sa09-HZvd) [sage] 2025/10/22(水) 21:55:39.76 ID:tW3LNod+a ^^;ゞ http://mevius.5ch.net/test/read.cgi/tech/1745631298/722
723: デフォルトの名無しさん (ワッチョイ 417c-ib/k) [sage] 2025/10/22(水) 22:05:42.67 ID:b6F/3uj70 ^^::←グローバル名前空間のリフレクション値 http://mevius.5ch.net/test/read.cgi/tech/1745631298/723
724: デフォルトの名無しさん (ワッチョイ d6d6-9FkA) [sage] 2025/10/23(木) 05:29:13.93 ID:HOQCmR4+0 v^^ http://mevius.5ch.net/test/read.cgi/tech/1745631298/724
725: デフォルトの名無しさん (ワッチョイ c1ef-6mJJ) [] 2025/10/23(木) 21:41:47.99 ID:FPW1mHao0 山崎渉 http://mevius.5ch.net/test/read.cgi/tech/1745631298/725
726: デフォルトの名無しさん (アウアウウー Sa09-6N1s) [] 2025/10/24(金) 14:17:57.63 ID:nAYKU6CIa GGは へへ ミミ http://mevius.5ch.net/test/read.cgi/tech/1745631298/726
727: デフォルトの名無しさん (JP 0Hab-oW0m) [] 2025/10/29(水) 17:48:11.20 ID:KY7jGttbH Y(^_^)Y なんすかこれ 口が違う。覚えてる人修正して http://mevius.5ch.net/test/read.cgi/tech/1745631298/727
728: デフォルトの名無しさん (アウアウウー Sae3-N4yN) [] 2025/11/11(火) 14:16:42.56 ID:crDtfQHZa バルタン星人のひと元気かな http://mevius.5ch.net/test/read.cgi/tech/1745631298/728
729: デフォルトの名無しさん (ブーイモ MM9f-lDbn) [sage] 2025/11/13(木) 14:20:45.09 ID:jo2+4JNJM 多分基本的な質問ですまんけど、参照型のメンバー持ったクラスをmove対応させるのってどうやんのが定石? ポインタにするしかない? http://mevius.5ch.net/test/read.cgi/tech/1745631298/729
730: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5) [sage] 2025/11/13(木) 14:53:55.31 ID:bJCWdXAy0 >>729 その参照が差す先のオブジェクトの所有権 (最終的に後始末する責任) を持っている状況ということ? ポインタを交換する手法がよく使われるのはヌルで無効を表現してるだけなので所有権を持ってるかどうかわかるフラグを立てれるならなんでもいいよ。 型システム的に表現するなら optional と reference_wrapper を組み合わせるのがよいかな。(optional は参照を直接には保持できない。) http://mevius.5ch.net/test/read.cgi/tech/1
745631298/730
731: デフォルトの名無しさん (ワッチョイ ffd6-UeF3) [sage] 2025/11/13(木) 22:00:10.45 ID:oKSfQs8Q0 いきなりわからんorz http://mevius.5ch.net/test/read.cgi/tech/1745631298/731
732: デフォルトの名無しさん (ブーイモ MMd3-lDbn) [sage] 2025/11/13(木) 22:38:55.22 ID:PBCTneT3M >>730 なるほどサンキュー でもoptionは省きたいところ moveしたあとは使わない前提でこれはUBになる? class A { std::reference_wrapper<const std::string> m_s; public: A(const std::string& s) : m_s(s) {} A(A&& rhs) : m_s(std::exchange(rhs.m_s, *(const std::string*)nullptr)) { } }; http://mevius.5ch.net/test/read.cgi/tech/1745631298/732
733: デフォルトの名無しさん (ワッチョイ 9f7c-18cq) [sage] 2025/11/13(木) 22:48:43.43 ID:qvmNyT2p0 ・T*(ナマポ)にする Pros: 一番素直、ムーブ後状態をぬるぽで自然に表現できる。 Cons: メンバ使ってるとこで*付けたり.を->に書き換えたりが必要。deleteとか加減算とか好き勝手できちゃう。今どきナマポとかダサい。 ・std::unique_ptr<T>やstd::shared_ptr<T>にする Cons: 多分セマンティクス違う(もともとはヨソのオブジェクト覗いてるだけでしょ?) ・std::referrence_wrapper<T>にする Pros: 参照の置き換えという意
味でこれも素直。 Cons: メンバ使ってるとこに.get()をつける書き換えが必要。ムーブがコピーになるので抜け殻に参照が残って潔癖な人だとキショい。 ・std::optional<std::referrence_wrapper<T>>にする Pros: 型的に一番真面目なので型マニアにっこり。 Cons: 書くのめんどい。「何これ?」って聞かれたときに説明めんどい(未来の自分含む)。.get()必要。 ・メンバはT&のままにしてムーブコンストラクタとムーブop=の方で対応する Pros: 既に使われてる所の書き換え不要。 Cons: ムーブ関数書くのとメンテし続けるのがめんどい。抜け
殻に参照先残る。 どれも完璧じゃないから好きなの選んでいいよ http://mevius.5ch.net/test/read.cgi/tech/1745631298/733
734: デフォルトの名無しさん (ワッチョイ 1f01-/Hnv) [] 2025/11/13(木) 23:01:27.30 ID:/tchf03X0 unique_ptrと同様のもの(unique_ref)を作ればいいんじゃねえのって話だろ ただしptrはnullptrで無効を表現してるから 代わりにフラグを用意する class unique_ref{ T& ref;//参照 bool isValid;//無効判定 //コンストラクタ unique_ref(T&r):ref(r), isValid(true){} //ムーブ コンストラクタ unique_ref(unique_ref&& a){move(a);} //ムーブ代入 unique_ref& operator=(unique_ref&& a){move(a);} move(unique_ref&&a){if(this!=&a && a.isValid) re
f=a.ref; a.isValid=false;} } てなかんじかと 知らんけど http://mevius.5ch.net/test/read.cgi/tech/1745631298/734
735: デフォルトの名無しさん (ワッチョイ 1fa6-0yYo) [sage] 2025/11/13(木) 23:06:32.01 ID:pKRh1I850 参照なんて引数と演算子オーバーロード以外で使ってもいいこと無くね? http://mevius.5ch.net/test/read.cgi/tech/1745631298/735
736: デフォルトの名無しさん (ワッチョイ 9f7c-18cq) [sage] 2025/11/13(木) 23:07:03.58 ID:qvmNyT2p0 そもそも所有権自分で保持してるメンバがもともとT&ってことはないだろ どっか遠くのオブジェクトを見えるようにしてるだけでしょ? (それはそれで設計的に焦げ臭いけど置いとく) http://mevius.5ch.net/test/read.cgi/tech/1745631298/736
737: デフォルトの名無しさん (ワッチョイ 1f01-/Hnv) [] 2025/11/13(木) 23:07:46.30 ID:/tchf03X0 もしくはunique_ptrをunique_refでラップしてしまうのが楽か http://mevius.5ch.net/test/read.cgi/tech/1745631298/737
738: デフォルトの名無しさん (ワッチョイ 1f01-/Hnv) [] 2025/11/13(木) 23:10:58.33 ID:/tchf03X0 >>736 たまにある 外部リソース(たとえばファイルハンドル)を一時的にクラスに保持して使いやすくするとか なんにせよ寿命を明示的に管理しておかないと後でやばいことになる http://mevius.5ch.net/test/read.cgi/tech/1745631298/738
739: デフォルトの名無しさん (ワッチョイ 9f7c-18cq) [sage] 2025/11/13(木) 23:14:39.55 ID:qvmNyT2p0 >>738 ファイルハンドルだとして、それを管理するクラスがファイルハンドルの値自体を持たずにヨソに置いて参照するのはなぜ? やっぱり意味がわからない http://mevius.5ch.net/test/read.cgi/tech/1745631298/739
740: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5) [sage] 2025/11/13(木) 23:20:38.76 ID:bJCWdXAy0 >>732 UB になる。 ポインタと違って参照自体は無効を表現できないのが C++ の基本ルールであり、 reference_wrapper でもそれは同じ。 それでもあえてやるなら適当にダミーのオブジェクトを作っておいてそれを参照していたら無効ということにするというようなことをできなくはないが……それはそれでちょっと不恰好だよね。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/740
741: デフォルトの名無しさん (ワッチョイ 1f01-/Hnv) [] 2025/11/13(木) 23:22:41.52 ID:/tchf03X0 >>739 クラス内部でちゃんと管理するのがいいんだけど時には関数内クラスを定義してちょっとしたことを行うこともある(かも) その時には所有権を一時的にでも委譲しなきゃならなくなる http://mevius.5ch.net/test/read.cgi/tech/1745631298/741
742: デフォルトの名無しさん (ワッチョイ 9f7c-18cq) [sage] 2025/11/13(木) 23:30:06.73 ID:qvmNyT2p0 >>741 ハンドルは外部で持ったままで、その関数内クラスにはハンドルの参照を渡す(関数内クラスの参照メンバを外部のハンドルで初期化する)って言ってる?それ委譲とは言わないよ 委譲したからにはそのリソースはその関数内クラスの消滅とともに消えないといけないけど、そうなったら外部で持ってたハンドルの実体はどうなるの? どんなケースを想定してるのか全然わかんない http://mevius.5ch.net/test/read.cgi/tech/1745631298/742
743: デフォルトの名無しさん (ブーイモ MM0f-lDbn) [sage] 2025/11/14(金) 12:19:28.56 ID:YW3kWFexM >>740 までもnull objectはよく使ってるからそれにするわ 個人的にはすっきり でもc++の参照っていらん子やん?って気がしてならない class A { static constexpr std::string s_empty_str{""}; std::reference_wrapper<const std::string> m_s; public: A(const std::string& s) : m_s(s) {} A(A&& rhs) : m_s(std::exchange(rhs.m_s, s_empty_str)) { } }; http://mevius.5ch.net/test/read.cgi/tech/1745631298/7
43
744: デフォルトの名無しさん (ワッチョイ ff36-TpjX) [] 2025/11/14(金) 17:06:33.25 ID:sw2A38eb0 >>743 型無しのnullpointerが型システム(機能保証)を破壊しているから、型を強要する参照は必要。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/744
745: デフォルトの名無しさん (ブーイモ MM0f-lDbn) [sage] 2025/11/14(金) 17:48:56.23 ID:d/VpWy+aM >>744 古くね? そういうのはoptional使えってのが最近のやり方でしょ? http://mevius.5ch.net/test/read.cgi/tech/1745631298/745
746: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f32-jcp5) [sage] 2025/11/14(金) 19:18:46.50 ID:YeCIJNF30 >>743 参照は色々な場面で有用ではあるが、 D&E によれば最初の動機は演算子オーバーロードだと書かれている。 オブジェクトをコピーする必要がない (値をコピーせずに場所を渡せば充分) ような状況で参照がなくポインタを使うならいちいち &a+&b みたいにして書く必要が生じる。 いかにも煩わしいだろう。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/746
747: デフォルトの名無しさん (ワッチョイ 1fa6-0yYo) [sage] 2025/11/14(金) 19:55:59.90 ID:p/1JbX4j0 C++より古いの新しいの含めて多くの言語が採用してるように参照は引数でのみ使用可能で良かったと思うよ http://mevius.5ch.net/test/read.cgi/tech/1745631298/747
748: デフォルトの名無しさん (ワッチョイ 9fda-V2U1) [] 2025/11/14(金) 20:35:30.63 ID:/xnnTPah0 >>747 他の言語はともかく、C++の参照は引数に限定されてないですよ。 int a = 10; int* pa = &a; http://mevius.5ch.net/test/read.cgi/tech/1745631298/748
749: デフォルトの名無しさん (ワッチョイ 1f42-q6Sd) [] 2025/11/15(土) 10:22:10.37 ID:ncudN0/g0 747は、(実際の仕様はそうなっていないけど)引数でのみ使用可能なら良かったのに……という意味だと思うぞ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/749
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 20 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.013s