Ich habe versucht, C ++ 0x-Initialisiererliste als Argument für einen Konstruktoraufruf auf diese Weise zu verwenden:
%Vor%mit dem Konstruktor
%Vor%Mit diesem Konstruktor beschwerte sich der Compiler:
%Vor%Wenn ich jedoch den Konstruktor in
geändert habe %Vor%Alles hat wie erwartet funktioniert. Warum funktioniert der erste Konstruktor nicht? Ich dachte, der Vektor könnte an der Stelle des Konstruktoraufrufs konstruiert und als Referenz übergeben werden, aber offensichtlich gibt es ein Problem. Kann mir das jemand erklären?
Danke
Übrigens. Ich benutze g ++ Version 4.4.5
BEARBEITEN: Dank der richtigen Antworten unten habe ich auch warum kann ich das nicht tun .
Sie können ein temporäres Objekt nicht an ein T&
binden.
Sie können ein temporäres Objekt an T const&
binden:
Aber ich würde die Gesundheit eines vector
of char
Zeigers in Frage stellen. Was ist los mit std::string
?
std::vector<const char *> &foos
ist die lvalue-Referenz. Sie versuchen, rvalue zu übergeben, das ist falsch. Sie können entweder rvalue reference std::vector<const char *> &&foos
oder const reference const std::vector<const char *> &foos
Sie haben bereits Ihre Antwort, aber da Sie eine "Initialisierungsliste" im Titel haben, sollten Sie in Betracht ziehen, einen (C ++ 0x) Initialisierungslistenkonstruktor zu schreiben, z. so:
%Vor%Dann bist du kein Aggregat mehr, aber du kannst es so aufbauen:
%Vor% Sie geben sogar il
als const-Referenz weiter, wenn Sie das bevorzugen.