Это не только не нужно, но и неправильно в этом месте.
Рассмотрим, что происходит, когда вы удаляете const
из возвращаемого типа:
/*const*/ std::vector<mv::Item>& mv::Workloads::getItems() const
{
return const_cast<std::vector<Item>&>(items_);
}
Теперь метод возвращает неконстантную ссылку на const
объект! Обратите внимание, что сам метод объявлен как const
, следовательно, this
равен const
в контексте этого метода, а также items_
равен const
. Использование ссылки, возвращаемой этим методом, приведет к неопределенному поведению при вызове метода в экземпляре const test
.
В этом смысле единственный эффект const_cast
здесь заключается в том, чтобы потенциально заглушить важную ошибку компилятора, если вы когда-нибудь решите изменить тип возвращаемого значения.
С другой стороны, в методе как есть (т.е. возвращающем ссылку const
) нет причины для приведения. items_
равно const
и возвращается ссылка const
на него.
const_cast
полезно, например, чтобы избежать дублирования кода для const
и не-1027 * методов, когда вы точно знаете, что отбрасываемый вами const
объект действительно не const
, см. здесь для деталей.
PS : если вы действительно хотите вернуть изменяемую ссылку на член из метода const
, вы должны объявить член mutable
. Кроме того, тогда const_cast
не потребуется. Тем не менее, mutable
следует использовать с осторожностью и, как правило, в первую очередь не требуется.