C++相談室 part166 (754レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
1: sage (ワッチョイ 8732-NXaD) [] 2025/04/26(土) 10:34:58.41 ID:pbPDl6lv0 !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること 次スレは>>980が立てること 無理なら細かく安価指定 ※前スレ C++相談室 part165 https://mevius.5ch.net/test/read.cgi/tech/1698705458/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured http://mevius.5ch.net/test/read.cgi/tech/1745631298/1
674: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/26(金) 12:11:01.51 ID:uQKo8FSG0 あと >「auto なんか使っとるからじゃ!」 一言も言ってないんだが。流れ読み直しておいで http://mevius.5ch.net/test/read.cgi/tech/1745631298/674
675: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3) [sage] 2025/09/26(金) 12:54:00.88 ID:E9e6Z1Un0 >>672 > autoで受けると式の展開が行われず、計算処理の無いコードになってしまう 書いてなかったが評価タイミングは適当な関数で明示的にする前提を置いてた。 未定義を踏むのは他の何と比べても駄目だ。単に思ってた結果と違ったなんてのは重要じゃない。 > 誰も「ETを万人が使うべき」だなどと言っとらんよ、何が気に入らんかったの? 日常的には使わないケースだからこそだ。 それが auto の問題点のように挙げられてただろ? ライブラリのほうが C++ の自然な習慣に合わせるのが筋なのにさ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/675
676: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 13:15:19.27 ID:4po4sxfpp >>657-658 http://mevius.5ch.net/test/read.cgi/tech/1745631298/676
677: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 13:19:26.24 ID:4po4sxfpp >>675 あと、ETで式の評価が発生するのは関数の呼び出し時ではない。どうでもいいけど あと俺が作ったのは4次元まで(行列なら4x4まで。ゲーム用なので)だからヒープ使わんのでそもそもムーブどうこうは関係無いし、勝手によそのライブラリの未定義の話を持ってこられても困る http://mevius.5ch.net/test/read.cgi/tech/1745631298/677
678: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3) [sage] 2025/09/26(金) 13:57:45.37 ID:E9e6Z1Un0 >>677 eigen は例として話題に出したつもりだったが余計だったな。 端的に主旨を言えば expression template の原理的には auto で受けれるように作ることは可能、かつその方が親切な作りだろうという話をしてる。 お前がどんな設計をしたのかなんてそれこそ俺には知ったことじゃないし、知りようもない。 お前のライブラリで auto で受けれないのはお前がそう設計しただけの話なので、 それを根拠に auto がどうこう言ってもなんの足しにもならん。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/678
679: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 14:04:20.28 ID:4po4sxfpp >>657-658 ETの話はここで出した。 で、俺のautoの使い方に関する意見は>>656だ 自分が何をやってるか良く考えてからレス書き直せ http://mevius.5ch.net/test/read.cgi/tech/1745631298/679
680: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3) [sage] 2025/09/26(金) 14:08:11.66 ID:E9e6Z1Un0 >>679 悪い設計のせいで利用者に不自然な書き方を強いるライブラリを作ったという話だということは理解してる。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/680
681: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 14:13:42.65 ID:4po4sxfpp あといちいち知ったかぶってるバカに教えてやるのも腹が立つが、普通数値演算でET使うときは代入演算子やコンストラクタに式を渡した場所で初めて式を展開するんだよ (autoでわざと評価を遅延させることも可能だと書いただろアホ) Eigenでも多分そう もちろんboost::spiritとかの構文解析ならパース処理の関数に渡すまで展開しないだろうが http://mevius.5ch.net/test/read.cgi/tech/1745631298/681
682: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 14:14:19.90 ID:4po4sxfpp >>680 不自然なのはお前の、「スキルに見合わない自尊心」だと思うぞ http://mevius.5ch.net/test/read.cgi/tech/1745631298/682
683: デフォルトの名無しさん (ササクッテロラ Sp23-P6+q) [sage] 2025/09/26(金) 14:24:32.42 ID:4po4sxfpp バカが屁理屈書いてきそうだから再三言うが、>>658は>>657を叩くために出した問いに過ぎない 「意図しないコードになる」という話 これだからお前には絡みたくないんだよマジ鬱陶しい http://mevius.5ch.net/test/read.cgi/tech/1745631298/683
684: デフォルトの名無しさん [sage] 2025/09/26(金) 17:03:47.95 ID:iKKvsVQ80 お前ってのははちみつのこと言ってるのかね? 自分から絡んどいて何言ってんだろうコイツとしか思えんけど http://mevius.5ch.net/test/read.cgi/tech/1745631298/684
685: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/26(金) 17:53:41.26 ID:uQKo8FSG0 >>684 で、>>666の導出出来ない例って何?www http://mevius.5ch.net/test/read.cgi/tech/1745631298/685
686: デフォルトの名無しさん (ワッチョイ 467f-RvFB) [sage] 2025/09/26(金) 19:18:42.84 ID:+hZbpaFa0 >>685 ラムダの型導出できないだろ? なんでこんなのも知らんのにえらそうにしてんの? あと https://wandbox.org/permlink/q5sTF1hp76f7jpnq とかな この例でfooでもif constexprを使えばautoはなくせるがそんなことやって可読性とかほざけない 他にもパターンあるぞ 謝罪してお前が作ったらしいヘボライブラリ公開したら教えてやってもいいぞ http://mevius.5ch.net/test/read.cgi/tech/1745631298/686
687: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/26(金) 19:32:01.31 ID:uQKo8FSG0 屁理屈にも程がある 導出出来なきゃどうやって実体化するんだよ、Tしかテンプレートパラメータが無い状況でT以外に依存するものがあるのか? まさか結果がTに依存するテンプレートになったら「導出出来てない」とかほざくの? Tに依存するコンテナのイテレータと何も変わらんよそれ http://mevius.5ch.net/test/read.cgi/tech/1745631298/687
688: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/26(金) 20:12:50.41 ID:uQKo8FSG0 てかその例でauto使わずに戻り値格納するのにif constexpr使うしかないと思ってるとかどんだけ経験不足なんだ・・・(はっきり処理分けする必要がある場合を除く) そんなクソみたいな例ならさすがにdecltypeかauto使いたくなるが(そもそも使うなと言ってないんだが)、conditionalも知らんのかお前は 必死に探してきてご苦労さん http://mevius.5ch.net/test/read.cgi/tech/1745631298/688
689: デフォルトの名無しさん (ワッチョイ 7307-RsoB) [sage] 2025/09/26(金) 20:41:40.17 ID:aJA0eUoF0 あの…そろそろ言っとくが おもろいこと書いたヤツが優勝な? 2ちゃん5ちゃんの原則だぞ http://mevius.5ch.net/test/read.cgi/tech/1745631298/689
690: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/26(金) 20:46:36.85 ID:uQKo8FSG0 >>665はおもろいと自分で思ってんの?w http://mevius.5ch.net/test/read.cgi/tech/1745631298/690
691: デフォルトの名無しさん (ワッチョイ 467f-RvFB) [sage] 2025/09/26(金) 20:59:48.54 ID:+hZbpaFa0 >>687 おじいちゃん、ラムダの例で詰んでんのわかる? わかんない? わかんないかぁ http://mevius.5ch.net/test/read.cgi/tech/1745631298/691
692: デフォルトの名無しさん (ワッチョイ 8a02-CSnM) [sage] 2025/09/27(土) 00:06:32.90 ID:ov4hhnsF0 やっぱautoはゆるいね C#とかPython的な感じ… http://mevius.5ch.net/test/read.cgi/tech/1745631298/692
693: デフォルトの名無しさん (ワッチョイ 7307-RsoB) [sage] 2025/09/27(土) 05:08:15.66 ID:rNLW6nkI0 C++は自由なんだよ 変な風にも使えるし、傍で見てたらめちゃくちゃにもなる http://mevius.5ch.net/test/read.cgi/tech/1745631298/693
694: デフォルトの名無しさん (ワッチョイ 1ed6-X2Ee) [sage] 2025/09/27(土) 05:36:45.87 ID:p3kzti810 自分が使った方がいいと思った時は使う。 しかないよ。後は規約や上司に従うぐらいか。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/694
695: デフォルトの名無しさん (ワッチョイ 7f7c-3pIy) [sage] 2025/09/27(土) 11:22:44.98 ID:0x5FUGdK0 久々にC++スレらしくなってておっちゃん楽しいよ http://mevius.5ch.net/test/read.cgi/tech/1745631298/695
696: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-VPhE) [sage] 2025/09/27(土) 17:37:01.17 ID:nSvwU9re0 >>681 コンストラクタや代入演算子で実際の計算を起動する方式も支持があるのは知ってるよ。 だからその代表例として有名どころの Eigen を話題に出したのだし、そこに齟齬はない。 その上で唯一の方式ではないし悪い設計だと言ってる。 私に反論するならどうしてそんな方式を取るのか利点 (悪い設計ではない理由) を説明すべきだった。 「数値計算で expression template を使うときは普通」なんて情報量ゼロのことを書かれても何の意味も感じられない。 コンストラクタや代入演算子をトリガーにするのは expression template を最適化として使う考え方だ。 つまり見かけ上は普通に式を書いてるだけなのに実は高速化しているというのがキモで、普通の式である「かのように」見える抽象化に意味がある。 実際の型を意識せざるを得なくなった段階で抽象化は破綻してる。 auto を使ったら何が起こるかを意識しなければならないのはライブラリ設計の失敗なんだよ。 隠れていたりいなかったりする半端な抽象化層を悪い設計と呼ぶのは間違ってるか? > 再三言うが、>>658は>>657を叩くために出した問いに過ぎない > 「意図しないコードになる」という話 そんなので意図しないコードになってしまうような作りのライブラリは出来が悪いという話なのはかわらん。 様々な事情に配慮してそうならざるを得ないということもあるというのならわかるが、 そうじゃなくて「それが普通なんだ」と思い込んだ狭い見識での判断なんだろ? 型を書くか auto にするかはスタイルの問題で、どちらを使うかで挙動が切り替わってしまうような設計のライブラリが本当にまともか? http://mevius.5ch.net/test/read.cgi/tech/1745631298/696
697: デフォルトの名無しさん (ワッチョイ 0679-P6+q) [sage] 2025/09/27(土) 17:54:13.79 ID:iipvXy1W0 よほど悔しかったんか知らんが、恥の上塗りやめたら? autoをC++に取り込んだ人達は、お前が調子に乗るために提案したわけでも採用したわけでもなかろうよ http://mevius.5ch.net/test/read.cgi/tech/1745631298/697
698: デフォルトの名無しさん (アウアウウー Sacf-kv3/) [] 2025/09/27(土) 19:49:03.02 ID:k7oMySGea >>696 八光さんに同意だけど それだとC++が設計ミスと言う結論になりかねない http://mevius.5ch.net/test/read.cgi/tech/1745631298/698
699: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f32-BMc3) [sage] 2025/09/27(土) 20:00:56.28 ID:nSvwU9re0 C++ が設計ミスだらけなのは今更な話だろ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/699
700: 580 (ワッチョイ f5a1-hkyQ) [sage] 2025/09/28(日) 18:27:48.51 ID:MSQtxm6D0 解決しますた! http://mevius.5ch.net/test/read.cgi/tech/1745631298/700
701: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2) [sage] 2025/09/28(日) 19:20:47.09 ID:pjQge+jC0 そうか。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/701
702: デフォルトの名無しさん (ワッチョイ 4366-WwN1) [sage] 2025/09/29(月) 19:03:56.70 ID:ALxfRd8b0 VSCode(WSL)のclang-tidyで質問です 関数にconst付けるのを警告する「readability-make-member-function-const」って奴ですがDoSave()関数にも警告が出ます 可能ならgetterのみに付けたいのですが皆さんこれはどうされてますか? 無効にしてるか、無視してるか、const付けてるか、その他何かやってますか? C++の環境構築は初めてなので助言をいただけるとありがたいです よろしくお願いします http://mevius.5ch.net/test/read.cgi/tech/1745631298/702
703: デフォルトの名無しさん (ワッチョイ 2d7c-2Udd) [sage] 2025/09/29(月) 19:56:30.29 ID:BDszbKFL0 こういうこと? 要はconst性を「セーブさせたくない」という符丁に使いたいのかな class Hoge; // DoSave()持ち void foo(Hoge& h1, const Hoge& ch2) { h1.DoSave(); //ゆるす ch2.DoSave(); //ゆるさない } そんな変なことやめとけとしか思わないけど、どうしてもそうしたい理由があるなら言ってみ http://mevius.5ch.net/test/read.cgi/tech/1745631298/703
704: デフォルトの名無しさん (ワッチョイ adf0-pGVw) [sage] 2025/09/29(月) 20:49:50.37 ID:Qgirjd9Z0 const_cast<Hoge*>(&ch2)->DoSave(); http://mevius.5ch.net/test/read.cgi/tech/1745631298/704
705: デフォルトの名無しさん (ワッチョイ 4376-Duv+) [sage] 2025/09/29(月) 22:22:15.60 ID:ALxfRd8b0 >> 703-704 すみませんサンプルを載せるべきでした ソース: double Point::X(){return x;} void Point::X(double value){ x=value;} ヘッダ: static Point { public: double X(); void X(double value); private : double x=0; }; clang-tidy を実行すると「double Point::X()」のX部分で「Method 'X' can be made const (readability-make-member-function-const)」という警告が出ます 調べてみると「constを追加して、内容が変更されないことを明確にすべき」らしいです ソース:double Point::X() const {return x;} ヘッダ:double X() const; 上記だけなら問題無いのですが、下記のような関数にも同じ警告が出てしまいます ソース:void Sample::DoSave(){ ファイルの保存処理 } ヘッダ:void DoSave(); この場合、getterではなく処理なので、const は付けるべきでは無いと考えてます そこで質問ですが、clang-tidy で静的チェックを行う場合「readability-make-member-function-const」の扱いはどうすべきなのか気になった次第です 「無効にすればいいのか」と思いながらも、C#のプロパティではないので、「C++は変更されないことを明示した方が分かりやすいのか?」とどのように設定すべきか悩んでいます よろしくお願いします 環境は下記:VSCode、ubuntu 22.04 (WSL)、C++ 17、clang-tidy-15 http://mevius.5ch.net/test/read.cgi/tech/1745631298/705
706: デフォルトの名無しさん (ワッチョイ 1b39-ZlhK) [sage] 2025/09/29(月) 23:01:05.35 ID:jk3QzjEU0 NOLINT http://mevius.5ch.net/test/read.cgi/tech/1745631298/706
707: デフォルトの名無しさん [sage] 2025/09/29(月) 23:04:57.63 ID:rfIMSjI90 >>705 その場合const付けたほうが良い理由は「変更されないことを明示」することより constのインスタンスに対してその関数を呼べなくなることでは? ↓はエラーか警告(どっちかは忘れた)になると思う(constオブジェクトの非constメンバ関数は呼び出せない) void SaveData(const Sample sample) { sample.DoSave(); } void Sample::DoSave() const { ファイルの保存処理 } にしておけば、DoSaveは呼び出せる http://mevius.5ch.net/test/read.cgi/tech/1745631298/707
708: デフォルトの名無しさん (ワッチョイ adf0-pGVw) [sage] 2025/09/30(火) 01:33:12.30 ID:Xmjd+d/v0 処理だからconst付けないんじゃなくて、そのメンバ関数がPointクラスの中身を書き変えないことを保証するためにメンバ関数の後ろにconstは付ける つまり、Save処理はPointクラスを特段変更するメソッドではないだろ? だったらconstは付けるべき http://mevius.5ch.net/test/read.cgi/tech/1745631298/708
709: デフォルトの名無しさん (ワッチョイ 2d7c-2Udd) [sage] 2025/09/30(火) 07:07:46.33 ID:NaKN2pJV0 >>705 つまり、constを本来の意味(中身を変更するかどうか)ではなく「getterであるかどうか」を示すラベルとして使いたいってことでしょ? で、何を持って「getterであるかどうか」はあなたの頭の中にしかない定義であって、そのlintはもちろんコンパイラもエディタも世のライブラリも知ったことではない それらをオレオレconstラベルに適合させるためにどうしたらいいか?というのがあなたの問うていることだ やっぱりどうしてそんなことがしたいのか全く理解できない http://mevius.5ch.net/test/read.cgi/tech/1745631298/709
710: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2) [sage] 2025/09/30(火) 08:58:44.76 ID:0fqHawiZ0 >>705 オブジェクトがなんらかのストレージを抽象化したものであると考えたらそのオブジェクトが const であるときはセーブ機能を使えないようにしたいというのはわからんでもない。 実際の管理は他の場所でやっていて窓口に過ぎないならメンバ関数に const を付加可能 (だがそうしたくない) なこともあるだろう。 それが良い設計かどうかは脇に置いてそうすることに決めたときに clang-tidy の警告はどうすればいいのかということなら、 例外的な状況なので例外的なものとして無視してもらうしか仕方ないんじゃないか。 NOLINT コメントを書いておくと clang-tidy はその箇所については警告を抑制してくれるよ。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/710
711: デフォルトの名無しさん (スッップ Sd43-WwN1) [sage] 2025/09/30(火) 10:38:19.22 ID:Dzyyn8xKd >>706-710 御返事がおそくなりすみません ご意見ありがとうございます 自分の理解不足と設計思想が間違ってるまたはずれてるんだと理解しました ・「readability-make-member-function-const」の指示にしたがってconstを付けるのが良い ・更に言うと-fixオプションで自動付与するレベルの内容 ・だけどNOLINTで無視もできるよ(無視してるとは言ってない) ってことで理解しました 勉強になりました ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1745631298/711
712: デフォルトの名無しさん (ワッチョイ 2596-TDpG) [] 2025/09/30(火) 21:38:35.37 ID:bXNPhBlr0 VC++20のテンプレート制約で不可思議なことが起きるのだけど、以下の二つは同じ意味だよね? 1だと目的通りTParentに該当static関数<T>があれば適用、なければスルーという挙動になるのだけど、 2だと無くても適用されちゃって他を探しに行かずにオーバーロード未解決に陥るんだけどどういうことだろう? 1 template<typename T, typename TParent> concept HasSizeGetter = requires { (size_t)TParent::template get_size<T>(); }; template<HasSizeGetter<TParent> T> static consteval size_t get_require_space() { return TParent::get_size<T>(); } 2 template<typename T> requires requires { (size_t)TParent::template get_size<T>(); } static consteval size_t get_size() { return TParent::get_size<T>(); } http://mevius.5ch.net/test/read.cgi/tech/1745631298/712
713: デフォルトの名無しさん (ワッチョイ 2596-TDpG) [] 2025/09/30(火) 21:40:50.61 ID:bXNPhBlr0 ちょっと書き間違えてたけど1はget_require_spaceじゃなくてちゃんと2と同じくget_sizeね http://mevius.5ch.net/test/read.cgi/tech/1745631298/713
714: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2d32-jLB2) [sage] 2025/09/30(火) 23:39:48.15 ID:0fqHawiZ0 >>712 オーバーロード未解決という形で現れるのはよくわからないけど この場合はその関数テンプレートを使わなくても (呼び出さなくても) エラーになるのが正しい挙動だと思う。 get_size は依存名ではないのでテンプレートの定義時 (テンプレート実引数を当てはめる前) に名前のルックアップが試みられて失敗する。 requires 節はテンプレート引数の妥当性を検証する仕組みなのでテンプレート引数をあてはめなくても式が不成立になるようなのはエラー。 というのが私の理解なんだけどあんまり自信はない……。 http://mevius.5ch.net/test/read.cgi/tech/1745631298/714
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s