consideri il seguente costruttore:perché l'argomento predefinito non può dipendere dall'argomento non predefinito?
class MyClass {
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
};
dove unitaryVector(d)
è una funzione che restituisce un casuale std::vector
in d dimensioni.
Questo dà il seguente errore del compilatore:
error: default argument references parameter 'dimension'
MyClass(unsigned int dimension, std::vector vector=unitaryVector(dimension));
Perché non è questo idioma valida in C++ 11? Sembra essere abbastanza ovvio: se viene fornito l'argomento vector
, init vector
come una copia dell'argomento, altrimenti chiama la funzione e la inizia come una copia del valore restituito. Perché un compilatore non può capire questo?
La richiesta di funzionalità sembra una cosa molto ragionevole da volere, ma, è nello standard? In caso contrario, gli autori di compilatori non sono obbligati a implementarlo. – pyon
possibile duplicato di http://stackoverflow.com/questions/1880866/cc-default-argument-set-as-a-previous-argument –
Si potrebbe usare uno std :: facoltativo <> con un valore predefinito di vuoto invece di un valore predefinito esplicito. Questo ha il vantaggio che il valore predefinito non farà parte del tuo ABI e quindi l'applicazione delle patch sarà più semplice. – lorro