Warum wird mein const ref in diesem Code ungültig und wie kann dies vermieden werden? Ich kann nicht kopieren, das ist der Flaschenhals in meiner Anwendung.Warum wird mein const ref ungültig?
class Foo {
public:
const std::string& string() const {
return string;
}
private:
std::string string = "asdf";
};
Foo foo;
std::vector<std::pair<const std::string&, int>> invalid;
for (int i = 0; i < 5; i++) {
invalid.emplace_back(std::make_pair(foo.string(), i);
// after this line invalid[i].first is invalid
}
Template-Parameter Abzug funktioniert so, dass '' make_pair' zurück std :: pair 'in Ihren Anruf; Dann konstruiert 'emplace' 'std :: pair ' von diesem. Also ist die Referenz an das Mitglied eines temporären Paares gebunden, nicht an 'foo.string'. Mache es 'invalid.emplace_back (std :: pair (foo.string(), i));' –
Woher weißt du, dass 'invalid [i] .first' ungültig ist? 'Foo' ist nicht mit einem Move-Konstruktor zuweisbar. Ist das für ein Vektorelement zulässig? (Echte Frage - Ich habe C++ 11 noch nicht vollständig eingeholt.) Funktioniert es, wenn Sie als Elementtyp 'std :: pair' verwenden? –
@IgorTandetnik - Machen Sie das eine Antwort, so kann ich es bitte! –