Существуют ли какие-либо статьи о том, когда использование константных ссылок в качестве возвращаемых типов является хорошей практикой?
Это не столько вопрос по конкретной проблеме, сколько поучительный вопрос.
Мы находимся в процессе перехода на современный C ++ с несколько рудиментарного уровня C, и мне и моему коллеге поручено наставлять группу других людей по C ++, поскольку мы довольно хорошо владеем этим языком.
У меня небольшой спор с указанным коллегой по этому поводу. Предлагаемый пример представляет собой простой класс:
class Cls
{
private:
vector<int> vec;
public:
Cls() { /* put 3 random values in vec */ }
const vector<int>& getVec() {return vec; }
};
Мой аргумент из того факта, что:
Ссылки должны использоваться как возвращаемые, так как вы не теряете время копирование вещей. Это прямое ускорение.
Ссылки должны быть константными, поскольку если вы вернете только ссылку на vec
, то любой может изменить ее, используя только геттер, что, очевидно, плохо. Следовательно, нам нужно вернуть const TYPE&
для геттеров.
Мой коллега поддерживает просто возврат vector<int>
и покончить с этим. Его аргументы:
- Это продвинутая концепция, которой не следует учить с самого начала. Сейчас мы можем просто возвращаться по значению из геттеров (и, таким образом, создавать копии) и переходить к ссылке позже, когда они смогут понять, что происходит за кулисами. (Мое мнение состоит в том, что, поскольку я считаю использование этого очень хорошей практикой, его следует обучать и применять с самого начала, чтобы люди привыкли к этому, а затем часть, где мы убедимся, что все действительно понимают, что означают ссылки на константы, может появиться позже поскольку у нас может не быть времени довести подопечных до уровня, на котором можно жонглировать ссылками.)
Итак, мои вопросы в основном следующие:
Есть ли какие-нибудь статьи о хороших практиках в этом вопросе и о том, когда использовать в качестве возвращаемых значений константные ссылки вместо значений? .. есть ли стандарт или соглашение в отрасли для ответа на этот вопрос?