Кроме того, в случае с SixthMap может ли произойти что-нибудь странное, поскольку мы используете автоматический вывод с амперсандом, но вызываемая функция также возвращает ссылку?
Код: Выделить всё
std::unordered_map
createStdObject()
{
std::unordered_map newUnorderedMap
{
{"A", {"first", "vector", "in", "map"},
{"B", {"second", "vector", "in", "map"}
};
return newUnorderedMap;
}
std::unordered_map&
createStdObjectWithReference()
{
std::unordered_map newUnorderedMap
{
{"A", {"first", "vector", "in", "map"},
{"B", {"second", "vector", "in", "map"}
};
return newUnorderedMap;
}
int main()
{
std::unordered_map firstMap = newUnorderedMap();
std::unordered_map secondMap = createStdObjectWithReference();
const auto thirdMap = newUnorderedMap();
const auto& fourthMap = newUnorderedMap();
const auto fifthMap = createStdObjectWithReference();
const auto& sixthMap = createStdObjectWithReference();
}
- и ThirdMap могут быть копиями возвращаемого значения newUnorderedMap()
Код: Выделить всё
firstMap - Все остальные приведут не к копиям, а к перемещению/ swap
- Амперсанд в автоматическом объявлении SixthMap по сути будет игнорироваться, а SixthMap будет идентичен пятомуMap с точки зрения типа и поведения
Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-a-copy
Мобильная версия