Ich habe einige Fragen zu den Standardwerten in einer Funktionsparameterliste
1) Ist der Standardwert ein Teil der Signatur? Was ist mit Parametertyp der Standardparameter?
2) Wo ist der Standardwert gespeichert? Im Stapel oder im globalen Heap oder im konstanten Datensegment?
Danke!
Nein, das Standard Argument ist kein Teil der Signatur und gehört nicht zum Funktionstyp.
Parametertyp ist ein Teil der Signatur. Der Standardargumenttyp hat jedoch keine Auswirkungen auf den Parametertyp, d. H. Der Standardargumenttyp hat keine Auswirkungen auf die Signatur.
Standardargumente werden nirgendwo spezifisch "gespeichert". Standardargumente sind "syntaktischer Zucker", der (als Standardargumente) nur während der Programmkompilierung existiert. Wenn der Compiler während der Kompilierung feststellt, dass ein Argument fehlt, wird das von Ihnen angegebene Standardargument verwendet. Die Auswertung des Standardarguments erfolgt im Kontext des Aufrufers. Wenn Sie ein temporäres Objekt als Standardargument angeben, wird jedes Mal ein separates temporäres Objekt erstellt, wenn Sie die Funktion mit dem Standardargument aufrufen und unmittelbar nach dem Ende des aufrufenden Ausdrucks gelöscht werden.
%Vor%Wenn Sie ein vorhandenes Objekt mit statischer Speicherdauer als Standardargument angeben, wird es dort gespeichert, wo Sie es definieren.
%Vor%Wenn Sie Standardargumente deklarieren, aber niemals wirklich verwenden, dh wenn Sie die Argumente jedes Mal explizit angeben, dann hat das kompilierte Programm keinerlei Spuren dieser Argumente (weshalb ich sie als Kompilierzeit "syntaktischer Zucker" bezeichnet habe) ).
P.S. Um einzuschließen, was Johannes in dem folgenden Kommentar sagt: Obwohl das Standardargument (falls verwendet) im Kontext des Aufrufers zum Zeitpunkt des Aufrufs ausgewertet wird, wird es nicht durch "Textersetzung" wie in meinen Beispielen gezeigt über. Vor allem erfolgt die Namenssuche für die in Standardargumenten verwendeten Namen an dem Punkt, an dem das Standardargument in der Funktionsdeklaration angegeben wird, nicht an der Stelle der Auswertung im Aufrufer.
1) Ist der Standardwert ein Teil der Signatur?
Nein.
Was ist mit dem Parametertyp der Standardparameter?
Der Typ befindet sich immer in der Signatur (wenn Sie nicht extern "..."
angeben), unabhängig davon, ob er Standardwerte hat oder nicht.
2) Wo ist der Standardwert gespeichert?
Nirgendwo. Sie werden vom Compiler automatisch ausgefüllt.
1) Der Typ / die Signatur einer Funktion, die Standardparameter hat, ist mit dem Typ / der Signatur der Funktion identisch, wenn der Parameter ohne einen Standardwert vorhanden war:
%Vor%2) Standardwerte werden vom Aufrufer beim Aufruf der Funktion erzeugt. In der Tat ersetzt der Compiler nur:
%Vor%mit:
%Vor%sobald es es sieht. Aus diesem Grund müssen Standardwerte an der Stelle angegeben werden, an der die Funktion deklariert ist, wo Anrufer sie sehen können.
In einigen anderen Sprachen gehört der Standardwert zur Funktion selbst. Es könnte sinnvoll sein zu fragen, wo dieser Standardwert "gespeichert" wird, aber das ist in C ++ nicht der Fall.
Tags und Links c++