次の方法で共有


lnt-make-member-function-const

メンバー関数がオブジェクトの状態を変更しない場合は、const キーワードを使用して注釈を付けます。 このガイダンスの出典は、「C++ Core Guideline Con.2」です。

次のコードにはリンターによってフラグが 2 回設定されます。getValue()getRadius() がオブジェクトの状態を変更しないためです。

class MyClass
{ 
public: 

  int getValue() { return value; }  // Flagged: ‘getValue’ doesn't modify the object's state. 
  void setValue(int newValue) { value = newValue; }  // OK: ‘setValue’ modifies the object's state.   

private: 

  int value = 42; 
}; 

double getRadius()
{   // Flagged: ‘getRadius’ doesn't modify the object's state. 
    return radius; 
} 

問題を解決する方法

メンバー関数がオブジェクトの状態を変更しない場合は、const とマークします。 これにより、コードのリーダーとコンパイラは、const オブジェクトに対して関数を呼び出しても安全であることを認識できます。

次の例では、constgetValue()getRadius() に追加されています。

class MyClass
{ 
public: 

  int getValue() const { return value; }  // Added const 
  void setValue(int newValue) { value = newValue; }  // OK: ‘setValue’ modifies the object's state.   

private: 

  int value = 42; 

}; 

double getRadius() const // added const
{   // ‘getRadius’ doesn't modify the object's state. 
    return radius; 
}  

エディターでこの変更を加えることができます。 フラグが設定されたシンボルにカーソルを置き、[考えられる修正内容を表示する]、次に [メンバーを const にする] を選択します。

Screenshot of the editor suggesting to make member const.

カーソルは int getValue() の行にあり、**[考えられる修正内容を表示する]** が表示されて選択されました。 次に、**[メンバーを const にする]** が表示され、const が追加された getValue関数が表示されます。 これで、**[メンバーを const にする]** を選択して変更を加えることができます。

フラグが設定されたメンバー関数すべてに対してこの変更を行います。

解説

Visual Studio 2022 17.8 で導入されたこのチェックは、C++ コードのメンバー関数での const の使用に焦点を合わせたものです。 C++ Core Guidelines では、メンバー関数がオブジェクトの状態を変更しない場合は const とマークすることを勧めています。

このチェックの現在の実装では、メンバー関数の宣言後に const を追加できます。 オブジェクトの状態を変更しない場合は、メンバー関数を最初から const と宣言することをお勧めします。

関連項目

C++ 用 IntelliSense コード リンターの概要