Questo è un follow-up su this question. Il codice nella domanda dell'OP mi sembrava abbastanza ragionevole e non ambiguo. Perché non C++ permette di utilizzare gli ex parametri per definire i valori di default di questi ultimi parametri, qualcosa di simile:Perché il C++ non consente i parametri di funzione utilizzati per i valori predefiniti ultimi parametri?
int foo(int a, int b = a);
Inoltre, almeno in C++ 11 dichiarati tipi di parametri possono essere utilizzati per determinare il tipo di ritorno, in modo da non è inaudito di utilizzare i parametri di funzione in modo simile:
auto bar(int a) -> decltype(a);
Così la domanda: quali sono la ragione (s) il motivo per cui non è consentita la dichiarazione di cui sopra di foo
?
Uno dei motivi che posso pensare è che per essere sano di mente ciò richiederebbe un vincolo su ordine di valutazione funzione di argomento, che è attualmente undefined in C++. Questo non è richiesto per l'esempio del tipo di ritorno. – MooseBoys
Oltre alla praticità, se è possibile aggiungere una situazione in cui ciò è * non * realizzabile tramite sovraccarico, come risponde l'altra domanda, aggiungerebbe una quantità significativa di * bisogno *. Senza * bisogno * o retrocompatibilità, il comitato standard è piuttosto conservativo in aggiunta funzionalità. Tendono a stare alla larga da "perché no?" a favore del "perché" molto più rigoroso. – WhozCraig
Come nota a margine: due convenzioni di chiamata più utilizzate in C++ ('__cdecl' e' __stdcall') [definiscono l'ordine da destra a sinistra] (https://msdn.microsoft.com/en-us/library/984x0h58 .aspx) dell'argomento che passa. Se esegui il debug del codice con alcuni parametri non trival (contenenti costruttori personalizzati) come argomenti di funzione e passo-in tale chiamata, noterai che i costruttori sono * effettivamente * chiamati in ordine inverso. –