C++相談室 part166 (760レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
715: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2) [sage] 2025/09/30(火) 23:47:38.26 ID:0fqHawiZ0 >>714 これは TParent::get_size が存在しない場合の話で、 TParent::get_size が存在するけど TParent::get_size<T> の展開に失敗する場合はちゃんと次の候補が選ばれるはず。 (手元に MSVC がないんだけどオンラインコンパイラで一応の動作確認はした。) http://mevius.5ch.net/test/read.cgi/tech/1745631298/715
716: デフォルトの名無しさん (ワッチョイ 2596-TDpG) [sage] 2025/10/01(水) 06:54:56.10 ID:O1Ml42XO0 >>715 そう、2の場合でもTParent::get_sizeはあるけど<T>とはマッチしない場合にはちゃんと1と同じ挙動になるんだよね TParentにstaticなget_sizeが全くない場合だと1と2で挙動が変わってしまう でも2って1をインラインに直接書いたものであって同じ意味だよね? だからrequiresがどういう意味を持つかとか以前に挙動変わってくる時点で不可思議なんだよね http://mevius.5ch.net/test/read.cgi/tech/1745631298/716
717: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-I4u/) [sage] 2025/10/01(水) 07:43:33.30 ID:XKqCU3PC0 >>716 1 の場合は get_size は依存名だ。 そこで解釈が違うよ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/717
718: デフォルトの名無しさん (ワッチョイ faa6-/eJP) [] 2025/10/22(水) 12:58:32.68 ID:6nuMV8zc0 C++26から入るらしい^^と[::]という二つの演算子はどういう用途に使うものなのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1745631298/718
719: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4132-ctWl) [sage] 2025/10/22(水) 13:31:13.53 ID:/iXiQCcE0 >>718 リフレクションで検索したら色々な例がみつかるよ。 構文要素を値として取り扱う、本物のマクロだ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/719
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/1745631298/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) ref=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/743
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
750: デフォルトの名無しさん (ワッチョイ 9fda-V2U1) [] 2025/11/15(土) 19:11:12.30 ID:lfrbAWbT0 ああ >使用可能で良かったと思うよ ではなく、 >使用可能だったら良かったのにと思うよ って事ですか http://mevius.5ch.net/test/read.cgi/tech/1745631298/750
751: デフォルトの名無しさん (ワッチョイ ffa1-lDbn) [sage] 2025/11/15(土) 19:25:57.81 ID:3JdS/6Ib0 カスみたいな読解力 http://mevius.5ch.net/test/read.cgi/tech/1745631298/751
752: デフォルトの名無しさん (オッペケ Srf3-rRus) [sage] 2025/11/15(土) 19:35:13.09 ID:QqRirP4Fr そんなコミュ力高かったら、石が友達なんて言わない http://mevius.5ch.net/test/read.cgi/tech/1745631298/752
753: デフォルトの名無しさん (ワッチョイ 1f42-q6Sd) [] 2025/11/15(土) 19:39:44.33 ID:ncudN0/g0 分かりやすいように749みたいに書いたけど、747で普通に意味が通じるので、「ではなく」というとちょっと違う気がするかな。言葉って難しい。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/753
754: デフォルトの名無しさん (ワッチョイ 4d7c-2tyn) [sage] 2025/11/16(日) 01:00:07.67 ID:oagsDxeg0 こういう人が仕様書読んで実装すると思うとこわい http://mevius.5ch.net/test/read.cgi/tech/1745631298/754
755: デフォルトの名無しさん (アウアウウー Sa85-H7iN) [] 2025/11/16(日) 13:18:16.47 ID:0LN83zrSa 横からだけど >>747 で充分判る >>748 は本当に日本人か? http://mevius.5ch.net/test/read.cgi/tech/1745631298/755
756: デフォルトの名無しさん (ワッチョイ 7901-djhR) [sage] 2025/11/16(日) 13:32:50.84 ID:Xh/GBEYv0 C++ばっかりやっとるからだよ 日本語を使え http://mevius.5ch.net/test/read.cgi/tech/1745631298/756
757: デフォルトの名無しさん (ワッチョイ 0dda-43h0) [] 2025/11/16(日) 16:38:31.73 ID:r6khXsKc0 >>755 >748だけど日本人だよ。 >747日本語の文法としておかしいと思うんだが分かるんか…。 こっちが年食ったんかなぁ…。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/757
758: デフォルトの名無しさん (ワッチョイ 22f2-43h0) [sage] 2025/11/16(日) 16:49:19.65 ID:D8AV/AUw0 あんたは機能的非識字なんでしょ 歳とか関係ないって http://mevius.5ch.net/test/read.cgi/tech/1745631298/758
759: デフォルトの名無しさん (ワッチョイ 91df-iLwu) [] 2025/11/16(日) 18:20:15.84 ID:fnmgx6dT0 747は、日本語の文法としておかしなところは別にないけれども、748のような読み方も許すという点で多義的な文にはなっているかな。 「C++より〜ように」という前半の文脈があるので748のような受け取り方はしない方が普通だと思うが、文法的には748のような読み方も一応可能だろう。 「使用可能(ということ)で良かった」としたら、完全に一義的になっているとまでは言えないまでも、多少ニュアンスは明確になっているかな。そうでもないか。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/759
760: デフォルトの名無しさん (ワッチョイ 11da-ZOUt) [sage] 2025/11/16(日) 19:06:28.66 ID:B8gkzotY0 >>757 文字なんでニュアンスが伝わりづらいだけだよ 「この前の件だけど、両方出来るようになったよ」 「他と同じように片方のみで良かったと思うよ」 まあ誤解を与えない書き方とすると 「他と同じように片方のみで良かったのにと思うよ」 って感じで「のに」をいれた方が残念がっている様子が伝わってくるよね http://mevius.5ch.net/test/read.cgi/tech/1745631298/760
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.151s*