C ++ Standard-Argument für den Vektor & lt; int & gt; & amp;
Ich habe eine Funktion,
void test( vector<int>& vec );
Wie kann ich einstellen, dass das Standard-argument für vec ?
Ich habe versucht
void test( vector<int>& vec = vector<int>() );
Aber es ist eine Warnung "Nichtstandard-Erweiterung : 'default argument' : Konvertierung von 'std::vector<_Ty>' in 'std::vector<_Ty> &'"
Gibt es einen besseren Weg, dies zu tun ? Statt
void test() {
vector<int> dummy;
test( dummy );
}
Grüße,
Voteforpedro
InformationsquelleAutor der Frage voteforpedro | 2010-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht:
C++
nicht erlauben Provisorien gebunden zu sein, auf nicht-const-Referenzen.Wenn Sie wirklich brauchen, um eine
vector<int>&
(nichtconst
), können Sie deklarieren eine statische Instanz und verwenden Sie es als Standard - (also nicht vorübergehend) Wert.Aber Vorsicht, denn DEFAULT_VECTOR werden (können) verändert werden und wird nicht zurückgesetzt bei jedem Aufruf ! Nicht sicher, dass dies ist, was Sie wirklich wollen.
Dank stinky472, hier ist eine thread-sichere alternative:
Anstatt den default-Wert, könnte man genauso gut überlast
test()
mit einem null-parameter-version, die fordert, die andere version:InformationsquelleAutor der Antwort ereOn
Finde ich es fraglich, für eine nicht-
const
Referenz argument einen Standardwert haben. Was soll dies bedeuten?Häufig, eine Funktion, die ein nicht-
const
Verweis bedeutet "ich kann der Argumentation". Wenn das argument optional warum kein pass (nicht-const
) Zeiger? So, wenn ein Anrufer nicht wollen, um eine Argumente, die Sie weitergeben könnenNULL
.(Siehe hier für weitere Informationen zu pass-Funktion, Argumente).
Edit: Gut, und natürlich gibt es auch überlastung. Fügen Sie einfach eine weitere überladung, die nicht nehmen Sie dieses argument.
InformationsquelleAutor der Antwort sbi
Wir können nicht initialisiert werden veränderliche Verweise auf Provisorien. Nur const-Referenzen zulässt. Was Sie nach sind, ist wahrscheinlich dieses:
Abgesehen von der Vermeidung von undefinierten Verhalten, das am meisten Sinn macht, logisch und von einer const-correctness-Perspektive. Wenn Sie wollten, 'test' ändern Sie die original-Vektor, der an es übergeben, würden Sie nicht in der Lage gewesen, um sinnvoll einen Standardwert angeben. Es ist somit offensichtlich, Sie sind mit 'vec' hier für nur-lese-Zwecke und sollte deshalb machen Sie es eine const-Referenz.
InformationsquelleAutor der Antwort stinky472
Ich weiß, diese Frage wurde bereits im Jahr 2010, aber für C++11 kann man es so machen:
Wie bereits in diese Antwort.
InformationsquelleAutor der Antwort JohnJohn