Im Allgemeinen können STL-Container keine CopyAssignable
Typen wie Referenzen enthalten. Wenn ich den Container so konstruiere, dass keine Kopie stattfinden soll, ist der Code gültig. Es kompiliert mit std=c++11
und c++14
mit einer Version von gcc-7.2, aber ist das folgende gültig oder kann ich erwarten, dass es mit einem Bibliotheksupgrade bricht? Sollte ich in diesem Fall reference_wrapper
verwenden?Ist es legal, eine unordered_map zu erstellen, die Referenzen enthält?
#include <unordered_map>
struct S {};
void use (S&) {}
void test() {
S s1, s2;
const std::unordered_map<int, S&> m{{0, s1}, {1, s2}};
use(m.at(0));
}
bearbeiten ich brauche wirklich einen Verweis auf den Standard. Auch für mich ist es nicht genug, wenn ein standardkonformes Update der Compiler/Standard-Bibliothek den Code durchbrechen kann. Also reicht die Antwort für "unordered_map with reference as value" nicht für mich.
Mögliches Duplikat von [unordered \ _map mit Referenz als Wert] (https://stackoverflow.com/questions/24719044/unordered-map-with-reference-as-value) – davidhigh
im Allgemeinen erfordern Container CopyAssignable nicht nur für die Konstruktion , aber auch viele Algorithmen funktionieren möglicherweise nicht wie erwartet – user463035818