как мы все знаем, следует избегать использования const_cast для удаления константности указателя.
Но как же быть наоборот?
Для моего варианта использования у меня есть функция, которая копирует данные (байты) из неконстантного исходного буфера. Я подумал, что хорошим дизайнерским решением было бы объявить параметр в соответствии с этим исходным буфером полностью константным.
void copyfunction(const char* const data) { ... }
Для вызова функции, как показано ниже, это приведет к ошибке типа указателя 'const char * const ‹-> char *'.
void main() {
char sourcebuffer[] = {0x00};
copyfunction(sourcebuffer);
}
Конечно, теперь я мог бы просто объявить sourcebuffer
как const, но в моем случае у меня нет доступа к этой переменной, потому что она находится в другом месте кода (внешняя библиотека).
void main() {
char sourcebuffer[] = {0x00};
copyfunction(const_cast<const char* const>(sourcebuffer));
}
Однако следующий код будет работать, но хороший ли это стиль (в соответствии с моим вариантом использования)?
Я думал, что объявление параметра copyfunction
как const гарантирует пользователю не изменять (только для чтения) указатель или расположение самого исходного буфера. Таким образом, в этом случае const_cast будет только необходимым злом для включения вызова функции, а не для преднамеренного удаления константности указателя ...
Приветствует
main
returnint
). - person Yakk - Adam Nevraumont   schedule 06.01.2014const
ness будет за вас. И тип возвратаmain
-int
, а неvoid
. - person Praetorian   schedule 06.01.2014const_cast
добавляетconst
ness, но это опасно: например, отint**
доint const**
. См. Здесь: ideone.com/tcByRQ - person Yakk - Adam Nevraumont   schedule 06.01.2014