Вернуть 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