Ich bin ein Student, der const-Parameter immer noch nicht ganz versteht. Ich verstehe, warum dies nicht funktioniert:
#include
struct Node {
int Wert;
Node* nächste;
};
Node* cons(const int Wert, const Node * nächste) {
Node * tmp = new Node();
tmp->Wert = Wert;
tmp->nächste = nächste;
return tmp;
}
int main () {
const Node * k;
k = cons(1, NULL);
Node * p;
p = cons(2, k);
}
Das liegt daran, dass ich die Konstanz von k "abwürfe", indem ich p seine Adresse gebe.
Was ich durch die Markierung des Parameters als "const" beabsichtigt habe, war zu sagen, dass meine Methode den Knoten nicht direkt ändern wird. Wenn ich (Node * nächste) übergeben würde, würde ich das Gefühl haben, dass es keine Garantie gibt, dass meine Methode nicht auf diesen Zeiger zugreift und den Knoten durcheinander bringt. Vielleicht ist das töricht, da es dann keine Garantie gibt, dass der const Node, dem ich einen Zeiger übergeben habe, später über den neuen Zeiger darauf geändert wird. Es scheint nur seltsam, dass: in dieser Methode cons, alles was ich tue, ist, einen neuen Zeiger auf 'nächste' zu zeigen - ich habe 'nächste' nie berührt, nur darauf gezeigt - und doch reicht das aus, um die Konstanz zu brechen.
Vielleicht habe ich die Stärke des "const" -Versprechens einfach unterschätzt.
Danke!