Dies ist ein Follow-up auf this question. Der Code in der OP-Frage dort sah für mich ganz vernünftig und eindeutig aus. Warum nicht C++ mit früheren Parametern können Standardwerte letztere Parameter zu definieren, etwa wie folgt:Warum C++ erlaubt keine Funktionsparameter für Standardwerte letztere Parameter?
int foo(int a, int b = a);
auch, zumindest in C++ 11 deklarierten Typen von Parametern verwendet werden können, den Rückgabetyp zu bestimmen, so es ist nicht unbekannt Funktionsparameter in ähnlicher Weise zu verwenden:
auto bar(int a) -> decltype(a);
So ist die Frage: was ist die Ursache (n), warum die obige Erklärung von foo
nicht erlaubt ist?
Ein Grund, warum ich denken kann, das ist vernünftig, dies eine Einschränkung für Funktionsargument Auswerteauftrag erfordern würde, was derzeit nicht definiert in C++. Dies ist für das Rückgabetypbeispiel nicht erforderlich. – MooseBoys
Abgesehen von der Bequemlichkeit, wenn Sie eine Situation hinzufügen können, in der dies nicht * durch * Überlastung erreicht werden kann, wie die andere Frage beantwortet, würde es einen signifikanten Treibstoff von * brauchen * hinzufügen. Ohne * Notwendigkeit * oder Rückwärtskompatibilität ist das Standardkomitee in der Merkmalserweiterung etwas konservativ. Sie neigen dazu, "Warum nicht?" Zu vermeiden. zugunsten des viel strengeren "warum". – WhozCraig
Als Randnotiz: zwei gängige Aufrufkonventionen in C++ ('__cdecl' und' __stdcall') [Reihenfolge von rechts nach links definieren] (https://msdn.microsoft.com/de-de/library/984x0h58 .aspx) des Arguments übergeben. Wenn Sie Code mit einigen nicht-trivalen (mit benutzerdefinierten Konstruktoren) Parametern als Funktionsargumente debuggen und in einen solchen Aufruf einsteigen, werden Sie feststellen, dass Konstruktoren * tatsächlich * in umgekehrter Reihenfolge aufgerufen werden. –