C++相談室 part166 (754レス)
1-

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
713: (ワッチョイ 2596-TDpG) 09/30(火)21:40 ID:bXNPhBlr0(2/2) AAS
ちょっと書き間違えてたけど1はget_require_spaceじゃなくてちゃんと2と同じくget_sizeね
714
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2d32-jLB2) 09/30(火)23:39 ID:0fqHawiZ0(2/3) AAS
>>712
オーバーロード未解決という形で現れるのはよくわからないけど
この場合はその関数テンプレートを使わなくても (呼び出さなくても) エラーになるのが正しい挙動だと思う。

get_size は依存名ではないのでテンプレートの定義時 (テンプレート実引数を当てはめる前) に名前のルックアップが試みられて失敗する。
requires 節はテンプレート引数の妥当性を検証する仕組みなのでテンプレート引数をあてはめなくても式が不成立になるようなのはエラー。

というのが私の理解なんだけどあんまり自信はない……。
715
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2d32-jLB2) 09/30(火)23:47 ID:0fqHawiZ0(3/3) AAS
>>714
これは TParent::get_size が存在しない場合の話で、
TParent::get_size が存在するけど TParent::get_size<T> の展開に失敗する場合はちゃんと次の候補が選ばれるはず。
(手元に MSVC がないんだけどオンラインコンパイラで一応の動作確認はした。)
716
(1): (ワッチョイ 2596-TDpG) 10/01(水)06:54 ID:O1Ml42XO0(1) AAS
>>715
そう、2の場合でもTParent::get_sizeはあるけど<T>とはマッチしない場合にはちゃんと1と同じ挙動になるんだよね
TParentにstaticなget_sizeが全くない場合だと1と2で挙動が変わってしまう
でも2って1をインラインに直接書いたものであって同じ意味だよね?
だからrequiresがどういう意味を持つかとか以前に挙動変わってくる時点で不可思議なんだよね
717: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2d32-I4u/) 10/01(水)07:43 ID:XKqCU3PC0(1) AAS
>>716
1 の場合は get_size は依存名だ。
そこで解釈が違うよ。
718
(1): (ワッチョイ faa6-/eJP) 10/22(水)12:58 ID:6nuMV8zc0(1) AAS
C++26から入るらしい^^と[::]という二つの演算子はどういう用途に使うものなのでしょうか?
719: はちみつ餃子◆8X2XSCHEME (ワッチョイ 4132-ctWl) 10/22(水)13:31 ID:/iXiQCcE0(1) AAS
>>718
リフレクションで検索したら色々な例がみつかるよ。
構文要素を値として取り扱う、本物のマクロだ。
720: (アウアウウー Sa09-u8G0) 10/22(水)19:35 ID:t2Chdy11a(1) AAS
^^
↑ちょっと顔にみえる
721: (ワッチョイ aa71-zeRK) 10/22(水)21:43 ID:q+0a8lK20(1) AAS
^^;
722: (アウアウウー Sa09-HZvd) 10/22(水)21:55 ID:tW3LNod+a(1) AAS
^^;ゞ
723: (ワッチョイ 417c-ib/k) 10/22(水)22:05 ID:b6F/3uj70(1) AAS
^^::←グローバル名前空間のリフレクション値
724: (ワッチョイ d6d6-9FkA) 10/23(木)05:29 ID:HOQCmR4+0(1) AAS
v^^
725: (ワッチョイ c1ef-6mJJ) 10/23(木)21:41 ID:FPW1mHao0(1) AAS
山崎渉
726: (アウアウウー Sa09-6N1s) 10/24(金)14:17 ID:nAYKU6CIa(1) AAS
GGは
へへ
ミミ
727: (JP 0Hab-oW0m) 10/29(水)17:48 ID:KY7jGttbH(1) AAS
Y(^_^)Y なんすかこれ

口が違う。覚えてる人修正して
728: (アウアウウー Sae3-N4yN) 11/11(火)14:16 ID:crDtfQHZa(1) AAS
バルタン星人のひと元気かな
729
(1): (ブーイモ MM9f-lDbn) 11/13(木)14:20 ID:jo2+4JNJM(1) AAS
多分基本的な質問ですまんけど、参照型のメンバー持ったクラスをmove対応させるのってどうやんのが定石?
ポインタにするしかない?
730
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 9f32-jcp5) 11/13(木)14:53 ID:bJCWdXAy0(1/2) AAS
>>729
その参照が差す先のオブジェクトの所有権 (最終的に後始末する責任) を持っている状況ということ?
ポインタを交換する手法がよく使われるのはヌルで無効を表現してるだけなので所有権を持ってるかどうかわかるフラグを立てれるならなんでもいいよ。
型システム的に表現するなら optional と reference_wrapper を組み合わせるのがよいかな。(optional は参照を直接には保持できない。)
731: (ワッチョイ ffd6-UeF3) 11/13(木)22:00 ID:oKSfQs8Q0(1) AAS
いきなりわからんorz
732
(1): (ブーイモ MMd3-lDbn) 11/13(木)22:38 ID:PBCTneT3M(1) AAS
>>730
なるほどサンキュー
でもoptionは省きたいところ
moveしたあとは使わない前提でこれはUBになる?

class A {
 std::reference_wrapper<const std::string> m_s;
public:
省3
733: (ワッチョイ 9f7c-18cq) 11/13(木)22:48 ID:qvmNyT2p0(1/4) AAS
・T*(ナマポ)にする
Pros: 一番素直、ムーブ後状態をぬるぽで自然に表現できる。
Cons: メンバ使ってるとこで*付けたり.を->に書き換えたりが必要。deleteとか加減算とか好き勝手できちゃう。今どきナマポとかダサい。
・std::unique_ptr<T>やstd::shared_ptr<T>にする
Cons: 多分セマンティクス違う(もともとはヨソのオブジェクト覗いてるだけでしょ?)
・std::referrence_wrapper<T>にする
Pros: 参照の置き換えという意味でこれも素直。
省8
734: (ワッチョイ 1f01-/Hnv) 11/13(木)23:01 ID:/tchf03X0(1/4) AAS
unique_ptrと同様のもの(unique_ref)を作ればいいんじゃねえのって話だろ
ただしptrはnullptrで無効を表現してるから
代わりにフラグを用意する
class unique_ref{
T& ref;//参照
bool isValid;//無効判定
//コンストラクタ
省9
735: (ワッチョイ 1fa6-0yYo) 11/13(木)23:06 ID:pKRh1I850(1) AAS
参照なんて引数と演算子オーバーロード以外で使ってもいいこと無くね?
736
(1): (ワッチョイ 9f7c-18cq) 11/13(木)23:07 ID:qvmNyT2p0(2/4) AAS
そもそも所有権自分で保持してるメンバがもともとT&ってことはないだろ
どっか遠くのオブジェクトを見えるようにしてるだけでしょ?
(それはそれで設計的に焦げ臭いけど置いとく)
737: (ワッチョイ 1f01-/Hnv) 11/13(木)23:07 ID:/tchf03X0(2/4) AAS
もしくはunique_ptrをunique_refでラップしてしまうのが楽か
738
(1): (ワッチョイ 1f01-/Hnv) 11/13(木)23:10 ID:/tchf03X0(3/4) AAS
>>736
たまにある
外部リソース(たとえばファイルハンドル)を一時的にクラスに保持して使いやすくするとか
なんにせよ寿命を明示的に管理しておかないと後でやばいことになる
739
(1): (ワッチョイ 9f7c-18cq) 11/13(木)23:14 ID:qvmNyT2p0(3/4) AAS
>>738
ファイルハンドルだとして、それを管理するクラスがファイルハンドルの値自体を持たずにヨソに置いて参照するのはなぜ?
やっぱり意味がわからない
740
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 9f32-jcp5) 11/13(木)23:20 ID:bJCWdXAy0(2/2) AAS
>>732
UB になる。
ポインタと違って参照自体は無効を表現できないのが C++ の基本ルールであり、 reference_wrapper でもそれは同じ。
それでもあえてやるなら適当にダミーのオブジェクトを作っておいてそれを参照していたら無効ということにするというようなことをできなくはないが……それはそれでちょっと不恰好だよね。
741
(1): (ワッチョイ 1f01-/Hnv) 11/13(木)23:22 ID:/tchf03X0(4/4) AAS
>>739
クラス内部でちゃんと管理するのがいいんだけど時には関数内クラスを定義してちょっとしたことを行うこともある(かも)
その時には所有権を一時的にでも委譲しなきゃならなくなる
742: (ワッチョイ 9f7c-18cq) 11/13(木)23:30 ID:qvmNyT2p0(4/4) AAS
>>741
ハンドルは外部で持ったままで、その関数内クラスにはハンドルの参照を渡す(関数内クラスの参照メンバを外部のハンドルで初期化する)って言ってる?それ委譲とは言わないよ
委譲したからにはそのリソースはその関数内クラスの消滅とともに消えないといけないけど、そうなったら外部で持ってたハンドルの実体はどうなるの?
どんなケースを想定してるのか全然わかんない
743
(2): (ブーイモ MM0f-lDbn) 11/14(金)12:19 ID:YW3kWFexM(1) AAS
>>740
までもnull objectはよく使ってるからそれにするわ
個人的にはすっきり
でもc++の参照っていらん子やん?って気がしてならない

class A {
 static constexpr std::string s_empty_str{""};
 std::reference_wrapper<const std::string> m_s;
省4
744
(1): (ワッチョイ ff36-TpjX) 11/14(金)17:06 ID:sw2A38eb0(1) AAS
>>743
型無しのnullpointerが型システム(機能保証)を破壊しているから、型を強要する参照は必要。
745: (ブーイモ MM0f-lDbn) 11/14(金)17:48 ID:d/VpWy+aM(1) AAS
>>744
古くね?
そういうのはoptional使えってのが最近のやり方でしょ?
746: はちみつ餃子◆8X2XSCHEME (ワッチョイ 9f32-jcp5) 11/14(金)19:18 ID:YeCIJNF30(1) AAS
>>743
参照は色々な場面で有用ではあるが、 D&E によれば最初の動機は演算子オーバーロードだと書かれている。
オブジェクトをコピーする必要がない (値をコピーせずに場所を渡せば充分) ような状況で参照がなくポインタを使うならいちいち &a+&b みたいにして書く必要が生じる。
いかにも煩わしいだろう。
747
(1): (ワッチョイ 1fa6-0yYo) 11/14(金)19:55 ID:p/1JbX4j0(1) AAS
C++より古いの新しいの含めて多くの言語が採用してるように参照は引数でのみ使用可能で良かったと思うよ
748: (ワッチョイ 9fda-V2U1) 11/14(金)20:35 ID:/xnnTPah0(1) AAS
>>747
他の言語はともかく、C++の参照は引数に限定されてないですよ。

int a = 10;
int* pa = &a;
749: (ワッチョイ 1f42-q6Sd) 11/15(土)10:22 ID:ncudN0/g0(1/2) AAS
747は、(実際の仕様はそうなっていないけど)引数でのみ使用可能なら良かったのに……という意味だと思うぞ。
750: (ワッチョイ 9fda-V2U1) 11/15(土)19:11 ID:lfrbAWbT0(1) AAS
ああ
>使用可能で良かったと思うよ

ではなく、

>使用可能だったら良かったのにと思うよ
って事ですか
751: (ワッチョイ ffa1-lDbn) 11/15(土)19:25 ID:3JdS/6Ib0(1) AAS
カスみたいな読解力
752: (オッペケ Srf3-rRus) 11/15(土)19:35 ID:QqRirP4Fr(1) AAS
そんなコミュ力高かったら、石が友達なんて言わない
753: (ワッチョイ 1f42-q6Sd) 11/15(土)19:39 ID:ncudN0/g0(2/2) AAS
分かりやすいように749みたいに書いたけど、747で普通に意味が通じるので、「ではなく」というとちょっと違う気がするかな。言葉って難しい。
754: (ワッチョイ 4d7c-2tyn) 11/16(日)01:00 ID:oagsDxeg0(1) AAS
こういう人が仕様書読んで実装すると思うとこわい
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.012s