Können wir temporäre pass-in `std::vector<int>` parameter?
void PrintNow(const std::vector<int> &v)
{
std::cout << v[0] << std::endl;
}
std::vector<int>().push_back(20); //this line generates no complains
PrintNow(std::vector<int>().push_back(20)); //error
Vom VS2010 Sp1:
eror C2664: 'PrintNow' : cannot convert parameter 1 from 'void' an
'const std::vector<_Ty> &'
Q> Ist es möglich, dass wir passieren können einen temporären Vektor-Funktion?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++11 können Sie nur:
VS2010 noch nicht unterstützt, dieser Teil von C++11 aber. (gcc 4.4 und clang 3.1 do)
Wenn Sie nur ein einziges element, dann in C++03, die Sie tun können:
Wenn Sie mehr als ein element, dann glaube ich nicht, es gibt eine Lösung. Sie könnten dies tun:
Oder Sie schreiben eine varargs-Funktion, die eine Liste von ints und gibt einen Vektor. Es sei denn, Sie verwenden diese viel obwohl ich nicht weiß, dass es sich lohnt.
{20}
- syntax unterstützt die in mindestens GCC 4.4.5.boost::list_of
für eine Online-Lösung mit keine zusätzlichen Variablen bezeichnet.Den Fehler generiert, da der Rückgabetyp von
std::vector::push_back
Funktion istvoid
:Versuchen Sie Folgendes:
Den obigen code verwendet einen der verfügbaren Konstruktoren von
std::vector
Klasse:Das problem ist, dass
std::vector::push_back()
zurückvoid
, nicht, dass Sie können nicht passieren Sie eine temporäre für die Funktion.void vector::push_back ( const T& x )
void
...Wenn alle Elemente den gleichen Wert, Sie haben einen Konstruktor, der zu Ihren Anforderungen passt: