typedef ein Zeiger und const

8

Ich habe mir ein Beispiel angeschaut, das gezeigt hat, warum das Tippen eines Zeigers eine schlechte Übung ist. Der Teil, den ich über das Beispiel nicht verstanden habe, ist der, warum der Compiler das Problem nicht verstehen konnte. Ich habe das Beispiel in den folgenden Code ausgearbeitet:

%Vor%

Also konnte ich den Wert von a ändern. Obwohl das Beispiel erklärt, dass Sie typedef const int *TYPE ausführen müssten, um das Problem zu lösen, verstehe ich nicht, warum der Compiler den Fehler nicht abfangen konnte, wenn ich TYPE to be const im Funktionsargument selbst setzte. Ich bin mir sicher, dass mir etwas sehr Grundlegendes fehlt.

    
SandBag_1996 18.01.2016, 14:40
quelle

1 Antwort

13

Das Problem hier ist Verwirrung darüber, auf was const angewendet wird: Wird es auf den Zeigerwert selbst angewendet oder auf den Wert, auf den gezeigt wird?

const TYPE x sagt, dass der Zeigerwert konstant sein sollte. Dies entspricht ungefähr int * const x . Beachten Sie, dass der folgende Code zu einem Fehler führt:

%Vor%

Was Sie erwartet haben, ist const int * x , wodurch der Wert auf x eine Konstante zeigt.

Da der Typdef die Tatsache ausblendet, dass TYPE ein Zeigertyp ist, gibt es keine Möglichkeit zu spezifizieren, dass das Ding, auf das TYPE zeigt, neben dem Deklarieren eines anderen typedef auch const sein soll:

%Vor%

An diesem Punkt scheint der Typdefekt jedoch mehr Probleme zu verursachen als er löst ... Wahrscheinlich nicht die beste Idee.

    
DaoWen 18.01.2016, 14:48
quelle

Tags und Links