возвратите const auto object - и неявное совместное использование Qt - PullRequest
1 голос
/ 24 октября 2011

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

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 Ответ

1 голос
/ 24 октября 2011

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

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

/* const */ QList<mytype> mylst = get_list();  // ok! 'mylst' is modifiable
...