sich das folgende Konstruktor:Warum kann das Standardargument nicht von einem Standardargument abhängen?
class MyClass {
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
};
wo unitaryVector(d)
ist eine Funktion, die eine zufällige std::vector
in D Dimensionen zurückkehrt.
Dies gibt den folgenden Compiler-Fehler:
error: default argument references parameter 'dimension'
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
Warum ist das nicht Idiom gültig in C++ 11? Es scheint ziemlich offensichtlich zu sein: Wenn das Argument vector
bereitgestellt wird, init vector
als eine Kopie des Arguments, andernfalls rufen Sie die Funktion auf und init es als eine Kopie des Rückgabewerts. Warum kann ein Compiler das nicht verstehen?
Ihre Feature-Anfrage scheint eine sehr vernünftige Sache zu sein, aber, ist es im Standard? Wenn nicht, sind Compiler-Autoren nicht verpflichtet, es zu implementieren. – pyon
möglich Duplikat von http://StackOverflow.com/Questions/1880866/cc-default-argument-set-as-a-previous-argument –
Sie könnten ein Std :: Optional <> mit einem Standardwert von leer anstelle von verwenden ein expliziter Standardwert Dies hat den Vorteil, dass der Standardwert nicht Teil Ihres ABI ist und das Patchen einfacher wird. – lorro