C++: Nauja kalbos savybė

C++ leidžia sukurti objektą, kurio reikšmė yra pastovi, konstanta, t.y. kuri nustatoma objekto inicializacijos metu ir negali būti keičiama programos vykdymo metu. Pvz.,

class Pvz {
     public: int x;
             void Funkcija();
             Pvz();
}

const Pvz obj;

// Dabar negali pakeisti objekto 'obj' reikšmės, pvz.,
obj.x = 37;  // Neleistina

// Negalima net kviesti šio objekto funkcijos, pvz.,
obj.Funkcija(); // Neleistina
Draudimas kviesti pastovaus objekto funkcijas susijęs su atskiro kompiliavimo galimybe. Jei "Pvz::Funkcija" yra kitame atskirai kompiliuojamame modulyje, nėra būdų sužinoti, ar ji keičia objekto, su kuriuo dirba, reikšmes. Tačiau leidžiama aprašyti ir "pastovias" funkcijas, pvz.,
    void Funkcija () const;
Tokia funkcija nekeičia objekto, kurį naudoja, reikšmių. Ir jei "this" nuododos klasei T tipas yra
    T *const this;
tai funkcijai, aprašytai su "const", jau
    const T *const this;
t.y neleidžiama keisti nei pačios nuorodos, nei objekto, į kurį ji rodo. O visai neseniai buvo įtraukta nauja galimybė, leidžianti nurodyti, kad kai kuriuos klasės elementus galima modifikuoti net tada, kai visas objektas yra pastovus, "konstanta". Pvz.,
class Kinta { public:
      mutable int x;
      Kinta();
}

const Kinta obj2;

// Ir tada galima
obj2.x = 37;  // Leistina!
Panaudojimo pavyzdys:
class rectangle {
           int xvk, yvk; // (X,Y) viršutinis kairysis kampas
           int xad, yad; // (X,Y) apatinis dešinysis kampas
   mutable int P; // Plotas

   public: int Plotas() const {
               P = abs( (xad-xvk) * (yad-yvk) );
               return P;
           }
     class Rectangle (int xv, int yv, int xa, int ya):
           xvk(xv), yvk(yv), xad(xa), yad(ya)
           {
           }
};  // end class Rectangle

const Rectangle Stat(20, 10, 180, 120);

void Spausdink ()
{ printf ("Plotas=%d\n", Stat.Plotas());
}