Коллеги, объясните, как оно работает (если можно, со ссылками на документацию)
Почему функция
 
MyClass& func(const MyClass &rhs)
{
  Myclass tmp = rhs; // Конструктор копии определен корректно
  // преобразование tmp для заданных целей
  return tmp;
}
а функция
 
MyClass func(const MyClass &rhs)
{
  Myclass tmp = rhs; // Конструктор копии определен корректно
  // преобразование tmp для заданных целей
  return tmp;
}
Правильно ли я понимаю, что return tmp вызывает конструктор копии, прежде, чем разрушить tmp по выходу из функции? Или это как-то по-другому работает? Или обе версии неправильные?




