Als «c++-standard-library» getaggte Fragen

In der Programmiersprache C ++ ist die C ++ - Standardbibliothek eine Sammlung von Klassen und Funktionen, die möglicherweise in der Kernsprache geschrieben sind oder nicht und Teil von C ++ sind


2
Warum gibt `std :: string :: find ()` bei Fehlern den Enditerator nicht zurück?
Ich finde das Verhalten von std::string::findinkonsistent mit Standard-C ++ - Containern. Z.B std::map<int, int> myMap = {{1, 2}}; auto it = myMap.find(10); // it == myMap.end() Aber für eine Schnur, std::string myStr = "hello"; auto it = myStr.find('!'); // it == std::string::npos Warum sollte die fehlgeschlagene myStr.find('!')Rückkehr nicht myStr.end()statt std::string::npos? …

2
Ist es GCC9 erlaubt, den wertlosen Zustand der std :: -Variante zu vermeiden?
Ich habe kürzlich eine Reddit-Diskussion verfolgt, die zu einem schönen Vergleich der std::visitOptimierung zwischen Compilern führte. Mir ist Folgendes aufgefallen: https://godbolt.org/z/D2Q5ED Sowohl GCC9 als auch Clang9 (ich denke, sie haben dieselbe stdlib) generieren keinen Code zum Überprüfen und Auslösen einer wertlosen Ausnahme, wenn alle Typen bestimmte Bedingungen erfüllen. Dies führt …

1
Wie soll shift_right () in C ++ 20 implementiert werden?
In C ++ 20 <algorithm>erhält der Header zwei neue Algorithmen: shift_left()undshift_right() . Beide akzeptieren jeden LegacyForwardIterator. Denn shift_left()es wird spezifiziert, dass "die Bewegungen in aufsteigender Reihenfolge von ibeginnend ausgeführt werden ​0"; denn shift_right()es wird angegeben, dass "wenn ForwardItdie LegacyBidirectionalIterator-Anforderungen erfüllt sind, die Bewegungen in absteigender Reihenfolge von ibeginnend ausgeführt werden …


1
Warum gibt es sowohl in <algorithm> als auch in <utility> eine std :: move
Meistens wird std::movehier auf die &lt;utility&gt;Version verwiesen . Das std::movein macht&lt;algorithm&gt; tatsächlich das, was sein Name andeutet, move , während das std::movein&lt;utility&gt; sein Argument auf einen x-Wert umwandelt, was im Grunde nur ein Vorverarbeitungsschritt ist, um den x-Wert schließlich in einen l-Wert zu verschieben. Ist es also nicht verwirrend, movewenn …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.