Megosztás a következőn keresztül:


lnt-make-member-function-const

Ha egy tagfüggvény nem módosítja az objektum állapotát, jelölje meg a const kulcsszóval. Ez az útmutató a Con.2C++ core útmutatójából származik.

Példa

A linter kétszer jelöli a következő kódot, mert getValue() és getRadius() nem módosítják az objektum állapotát:

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; 
} 

A probléma megoldása

Jelölje meg a tagfüggvényeket const, ha nem módosítják az objektum állapotát. Ez lehetővé teszi a kód olvasóinak és a fordítónak, hogy a függvény biztonságosan meghívható egy const objektumra.

Az alábbi példában const hozzá lett adva getValue()-hez és getRadius()-höz.

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; 
}  

A szerkesztő elvégezheti ezt a módosítást. Helyezze a kurzort a megjelölt szimbólumra, és válassza a Lehetséges javítások megjelenítése, majd A tagok konstanssá tétele:

Képernyőkép a szerkesztőről, amely javasolja, hogy a tagot állandóvá tegyük.

A kurzor az int getValue() soron van, ekkor megjelent és ki lett választva a **Lehetséges javítások megjelenítése** opció. Ekkor a **Tagi const állítás** láthatóvá válik, és megjeleníti a get value függvényt, amelyhez constot adtunk hozzá. Most már választhatja a **Tagállandóvá tétel** lehetőséget a változtatás elvégzéséhez.

Végezze el ezt a módosítást az összes megjelölt tagfüggvény esetében.

Megjegyzések

A Visual Studio 2022 17.8-ban bevezetett ellenőrzés a C++ kód tagfüggvényeinek const használatára összpontosít. A C++ alapvető irányelvek azt javasolják, hogy a tagfüggvényeket const jelöljük meg, ha nem módosítják az objektum állapotát.

Az ellenőrzés jelenlegi megvalósítása lehetővé teszi, hogy const-t adjunk hozzá a tagfüggvényekhez a deklarációjuk után. Érdemes a tagfüggvényeket kezdetektől const deklarálni, ha nem módosítják az objektum állapotát.

Lásd még:

IntelliSense kódellenőrző C++-hoz – áttekintés