Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Język C++

mutable

[słowo kluczowe] Umożliwia modyfikowanie zmiennej klasy wewnątrz metody zadeklarowanej jako stała.

Opis szczegółowy

Słowo kluczowe mutable umożliwia modyfikowanie zmiennej klasy wewnątrz metody zadeklarowanej jako stała. Słowa kluczowego nie należy nadużywać. Zazwyczaj niniejsze słowo kluczowe stosuje się przy sekcjach krytycznych.

Fragment kodu z użyciem biblioteki boost

C/C++
class CKlasa
{
private:
    mutable boost::mutex m_cs;
    int m_licznik;
public:
    int ile() const
    {
        boost::mutex::scoped_lock lock( m_cs );
        return m_licznik;
    }
};

Przykład

Poniższy przykład pokazuje ideę działania, jednak nie jest dobrym przykładem zastosowania słowa kluczowego mutable:
C/C++
#include <cstdio>

class CMutable
{
private:
    mutable int zmienna;
public:
    CMutable()
        : zmienna( 0 )
    { }
    void ustaw( int nowaWartosc ) const
    {
        zmienna = nowaWartosc;
    }
    int daj() const
    {
        return zmienna;
    }
};

int main()
{
    CMutable klasa;
    klasa.ustaw( 123 );
    printf( "Wartosc = %d\n", klasa.daj() );
}

Błędy kompilacji

Jeśli zabraknie słowa kluczowego mutable dla zmiennej, która jest modyfikowana w metodzie zadeklarowanej jako stała to wystąpi następujący błąd kompilacji:
In member function 'void CMutable::ustaw(int) const':
error: assignment of data-member 'CMutable::zmienna' in read-only structure

Linki zewnętrzne