Предположим, есть метод, который возвращает std::set
:C++ возвращает класс в ссылку const или нет?
std::set<string> MyClass::myMethod() const
{
std::set<string> result;
// ... some code to fill result ...
return result;
}
В вызывающей стороны, мы можем сохранять результат myMethod
двумя способами:
void MyClass::test()
{
const std::set<string> s1 = myMethod(); // 1
const std::set<string>& s2 = myMethod(); // 2 (using reference)
// ... some code to use s1 or s2 ...
}
Мои вопросы:
- Есть ли разница между ними?
- Какой способ лучше и эффективен?
Требуется ли первая версия копии (РВО в сторону), если тип имеет движение конструктор и/или оператор назначения перемещения? – Kos
На практике вы предпочитаете, какой путь? – deepmax
@MasoudM. первый. –