Co const oznacza podążanie za podpisem funkcji/metody? [duplikat]

To pytanie ma już odpowiedź tutaj:

Zgodnie z MSDN: "gdy następuje lista parametrów funkcji członka, słowo kluczowe const określa, że funkcja nie modyfikuje obiektu, dla którego jest wywoływana."

Czy ktoś mógłby to nieco wyjaśnić? Czy to oznacza, że funkcja nie może modyfikować żadnego z elementów obiektu?
 bool AnalogClockPlugin::isInitialized() const
 {
     return initialized;
 }
 30
Author: Scott, 2009-10-11

4 answers

To znaczy, że metoda nie modyfikuje zmiennych członkowskich (z wyjątkiem członków zadeklarowanych jako mutable), więc może być wywołana na stałych instancjach klasy.

class A
{
public:
    int foo() { return 42; }
    int bar() const { return 42; }
};

void test(const A& a)
{
    // Will fail
    a.foo();

    // Will work
    a.bar();
}
 34
Author: Pierre Bourdon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 04:48:05

Zauważ również, że podczas gdy funkcja member nie może modyfikować zmiennych nie oznaczonych jako mutable, jeśli zmienne member są wskaźnikami, funkcja member może nie być w stanie modyfikować wartości wskaźnika (tzn. adresu, na który wskazuje wskaźnik), ale może modyfikować to, na co wskazuje wskaźnik (rzeczywisty region pamięci).

Więc na przykład:

class C
{
public:
    void member() const
    {
        p = 0; // This is not allowed; you are modifying the member variable

        // This is allowed; the member variable is still the same, but what it points to is different (and can be changed)
        *p = 0;
    }

private:
    int *p;
};
 16
Author: blwy10,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 13:27:08

Kompilator nie pozwoli funkcji const member zmienić *to lub wywołanie funkcji non-const dla tego obiektu

 2
Author: Satbir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 04:54:52

Jak odpowiedział @delroth oznacza to, że funkcja member nie modyfikuje żadnej zmiennej memeber oprócz tych zadeklarowanych jako mutable. Możesz zobaczyć dobre FAQ o poprawności const w C++ tutaj

 2
Author: Naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 04:55:49