Подтвердить что ты не робот

Что означает константа под знаком функции/метода?

В соответствии с MSDN: "Когда вы следуете за списком параметров функции-члена, ключевое слово const указывает, что функция не изменяет объект, для которого он вызывается".

Может кто-нибудь прояснить это немного? Означает ли это, что функция не может изменить какой-либо из членов объекта?

 bool AnalogClockPlugin::isInitialized() const
 {
     return initialized;
 }
4b9b3361

Ответ 1

Это означает, что метод не изменяет переменные-члены (кроме членов, объявленных как mutable), поэтому его можно вызывать в постоянных экземплярах класса.

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

Ответ 2

Обратите внимание также, что, хотя функция-член не может изменять переменные-члены, не помеченные как изменяемые, если переменные-члены являются указателями, функция-член может не иметь возможности изменять значение указателя (то есть адрес, на который указывает указатель), но он может изменить то, на что указывает указатель (область фактической памяти).

Итак, например:

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

Ответ 3

Компилятор не разрешает изменять функцию-член-константу * this или to вызывать функцию не-const-член для этого объекта

Ответ 4

Как ответил @delroth, это означает, что функция-член не изменяет никакой переменной memeber, кроме тех, которые объявлены как изменяемые. Вы можете увидеть хороший FAQ о константной корректности в С++ здесь