C++相談室 part166 (754レス)
C++相談室 part166 http://mevius.5ch.net/test/read.cgi/tech/1745631298/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
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
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
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
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.027s