Почему мой const ref недействителен в этом коде и как этого избежать? Я не могу копировать, это узкое место в моем приложении.Почему мой const ref недействителен?
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
}
Шаблон работает таким образом, что '' make_pair' возвращает зЬй :: пару <станд :: строка, Int> 'в вызове; затем 'emplace' строит' std :: pair 'из этого. Поэтому ссылка привязана к члену временной пары, а не к 'foo.string'. Сделайте это 'invalid.emplace_back (std :: pair (foo.string(), i));' –
Откуда вы знаете, что 'invalid [i] .first' недействителен? 'Foo' не присваивается конструктором перемещения. Является ли это законным для векторного элемента? (Подлинный вопрос - я еще не догнал C++ 11.) Работает ли он, если вы используете 'std :: pair' как ваш тип элемента? –
@IgorTandetnik - Сделай так, чтобы я мог его поддержать! –