Что означает константа под знаком функции/метода?
В соответствии с MSDN: "Когда вы следуете за списком параметров функции-члена, ключевое слово const указывает, что функция не изменяет объект, для которого он вызывается".
Может кто-нибудь прояснить это немного? Означает ли это, что функция не может изменить какой-либо из членов объекта?
bool AnalogClockPlugin::isInitialized() const
{
return initialized;
}
Ответы
Ответ 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 о константной корректности в С++ здесь