Es ist möglich, einen Vektor mit einem Iterator Bereich zu konstruieren, wie folgt aus:Baukonstruktion Behälter mit Initialisiererliste von Iteratoren
std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{});
Aber ich kann auch kompilieren und Ausführen von Code unter Verwendung von C++ 11 einheitliche Initialisierung Syntax (beachten Sie die Armschienen), wie folgt:
std::vector<std::string> vec{std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{}};
Was ist hier wirklich los?
Ich weiß, dass ein Konstruktor, der eine Initialisierungsliste nimmt, Vorrang vor anderen Bauformen erhält. Sollte der Compiler nicht zum Konstruktor auflösen, indem er eine Initialisierungsliste mit 2 Elementen von std::istream_iterator
übernimmt? Dies sollte ein Fehler sein, da ein std::istream_iterator
nicht in den Vektoren Werttyp std::string
konvertiert werden kann, richtig?
Kommt dies von http://stackoverflow.com/questions/17978410/how-do-you-know-when-an-input-stream-has-reated-the-last-word-in-a-line/17978633 # 17978633? : D – P0W
@ P0W JA! :) Ich habe diese Syntax viele Male benutzt, aber es hat mich wundern, wenn Sie es als C++ 11 Initialisierungsliste und nicht einfach Uniform Initialization Armschienen beschrieben. – Snps