2017-03-25 63 views
3
void g(int n, decltype(n) = 0); // ok 
void f(int n, int = n); // error : default argument references parameter 'n' 

int main() 
{ 
    f(1); // want it to be same as f(1, 1); 
} 

Warum lässt C++ nicht zu, dass ein Parameter ein Standardargument ist?Warum lässt C++ keinen Parameter als Standardargument zu?

Was ist der Grund?

+0

Ich weiß nicht, ob ich das falsch bekomme, aber ** void f (int n, int = n); ** hat einen Syntaxfehler, außerdem sollte man keine Integer in einer Funktion zuweisen eine andere Ganzzahl, wenn sie nicht initialisiert ist. Versuchen Sie, eine globale Variable int x = 1 zu deklarieren und sie dann als Standardargument zuzuweisen. – Weaboo

+1

Ich öffnete wieder. Das Duplikat behandelte nicht die Gründe dafür. – juanchopanza

Antwort

10

Ein oft zitiertes potentielles Grundprinzip für diese Einschränkung ist wie folgt: das Zulassen von Parametern als Standardargumente würde erfordern, dass zumindest eine teilweise Ordnung bei der Parameterauswertung auferlegt wird. Parameter, die als Standardargumente in anderen Parametern verwendet werden, müssten zuerst ausgewertet werden.

In der Zwischenzeit bleibt C++ weiterhin bei der ursprünglichen Parameterauswertung Ansatz: Parameter werden in nicht spezifizierten Reihenfolge ausgewertet.

Die gleiche Argumentation kann verwendet werden, um zu erklären, warum man nicht auf Klassenmitglieder in Standardargumenten von Elementfunktionen verweisen kann: das würde einige Bestellanforderungen für die Auswertung von versteckten Parameter this auferlegen.

Verwandte Themen