Вернуть const auto object - и неявное совместное использование Qt

Итак, известно, что этот код не имеет смысла:

const int foo() 
{
  int n = // do computation...;
  return n;
}

Потому что какой смысл возвращать const int, когда он все равно копируется?

Но с классами с неявным разделением (COW), такими как контейнеры Qt, это имеет смысл снова? Рассматривать:

const QList<mytype> get_list()
{
   QList<mytype> lst;
   // do stuff to fill list;
   return lst;
}

Теперь я могу сделать:

   const QList<mytype> mylst = get_list();

Поскольку Qt имеет неявное совместное использование для контейнеров, оно должно работать нормально, потому что return lst на самом деле не копирует содержимое списка, просто увеличивает refcount, и const убедитесь, что я не могу изменить его (если get_list хочу по какой-то причине убедиться в этом или должен const сам метод). Правильно ли мое мышление здесь?

1 ответ

и убедись, что я не могу изменить это... Правильно ли мое мышление здесь?

Я не мог понять весь вопрос. Но вышеприведенная часть не верна. Вы возвращаете только const значение из функции, и это не обязывает принимающую сторону также быть const, Так что удаление const от mylst разрешено и снова становится изменяемым.

/* const */ QList<mytype> mylst = get_list();  // ok! 'mylst' is modifiable
Другие вопросы по тегам