natknąłem się mylący komunikat o błędzie, gdy próbuje zrobić coś tak prostego jakstd :: vector: nie można wiązać 'std :: ostream aka {std :: basic_ostream <char>}' lwartość do 'std :: basic_ostream <char> &&'
std::cout << std::vector<int>{1,2,3};
który mówi
cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
int main() { std::cout << std::vector<int>{1,2,3}; }
(testowane przy użyciu gcc-4.8.1 z -std = C++ 11)
SO podobne pytania jak Overloading operator<<: cannot bind lvalue to ‘std::basic_ostream<char>&&’, która jest o kilka klasa zdefiniowana przez użytkownika z klasami zagnieżdżonymi. Jest też praca wokół zaakceptowanej odpowiedzi na to pytanie.
Ale nie wiem, czy to dotyczy std::vector
. Czy ktoś może wyjaśnić, dlaczego ten błąd zdarzył się std::vector
i jak go zinterpretować?
Dzięki
Dzięki za odpowiedź, która wyjaśnia pierwszą część pytania. Dodaję też własny kod do drukowania wektorów. To, czego nie rozumiem (druga część pytania), to sposób, w jaki otrzymujemy tego typu błąd l-ref/r-ref, gdy nie można znaleźć przeciążenia. – tinlyx
@TingL Dodano moje przypuszczenie co do natury błędu. – Angew
To przeciążenie nie jest szczegółem implementacji, ale jest wymagane przez standardowe streszczenie 27.7.1, aby umożliwić wstawienie do strumienia tymczasowego. Coś jak: 'std :: ofstream (" output.txt ") <<" Cześć tam \ n ";' –