Предупредите, что, по-видимому, использование COM без реестров для COM-компонентов, созданных в.NET, может случайным образом вызвать катастрофические отказы на Windows XP!
Ссылки: вопрос о Stackoverflow , где я изучил это, база знаний Microsoft статья , упомянутая в том вопросе. Существуют текущие исправления, но Нельзя перераспределить их.
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();
}
Также обратите внимание, что хотя функция-член не может изменять переменные-члены, не помеченные как изменяемые, если переменные-члены являются указателями, функция-член может не иметь возможности изменять значение указателя (т. Е. Адрес на который указывает указатель), но он может изменить то, на что указывает указатель (фактическая область памяти).
Так, например:
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;
};
Компилятор не позволяет константной функции-члену изменять * this или to вызвать неконстантную функцию-член для этого объекта
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