Что константа означает после функции/сигнатуры метода? [дубликат]

Предупредите, что, по-видимому, использование COM без реестров для COM-компонентов, созданных в.NET, может случайным образом вызвать катастрофические отказы на Windows XP!

Ссылки: вопрос о Stackoverflow , где я изучил это, база знаний Microsoft статья , упомянутая в том вопросе. Существуют текущие исправления, но Нельзя перераспределить их.

32
задан Scott 11 October 2009 в 04:46
поделиться

4 ответа

It means that the method do not modify member variables (except for the members declared as mutable), so it can be called on constant instances of the class.

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();
}
37
ответ дан 27 November 2019 в 20:39
поделиться

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

Так, например:

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
ответ дан 27 November 2019 в 20:39
поделиться

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

2
ответ дан 27 November 2019 в 20:39
поделиться

As answered by @delroth it means that the member function doesn't modify any memeber variable except those declared as mutable. You can see a good FAQ about const correctness in C++ here

2
ответ дан 27 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: