Eine Funktion kann nicht konstant sein.
Eine Methode hingegen schon.
Beispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class MyClass
{
public:
MyClass() : value(0)
{
}
~MyClass()
{
}
void setValue(int value)
{
this->value = value;
}
int getValue() const
{
return value;
}
private:
int value;
};
|
"getValue" ist konstant (
const), d.h. die Methode verändert das Objekt nicht.
"setValue" kann nicht konstant deklariert werden, weil darin "value" verändert wird (das ginge nur, wenn "value" mit
mutable deklariert würde).
Angenommen du hast eine Funktion:
|
C-/C++-Quelltext
|
1
2
3
4
|
void doSomething(const MyClass& object)
{
object.setValue(0); // <= FEHLER!
}
|
Das geht nicht, weil "doSomething" eine konstante Referenz übergeben bekommt. Auf konstante Referenzen oder Zeiger auf Objekte können nur konstante Methoden aufgerufen werden. "setValue" ist jedoch nicht konstant.
Eine Methode, die das Objekt irgendwie verändert oder auch nur eine Veränderung zulässt (z.B. durch Zeiger), kann nicht
const deklariert werden.