Вопрос

Это довольно просто, но я не могу ухватиться за это. Справка здесь

Находятся void *p и const void *p достаточно отличается? Зачем использовать функцию const void * вместо void *?

Это было полезно?

Решение

Причина использовать void* вообще (будь то const или нет) - это вид дженетности, который он обеспечивает. Это как базовый класс: все указатели находятся void* и может неявно бросить в это, но отбрасывает из void* Чтобы напечатать указатели должны быть сделаны явно и вручную.

Обычно у C ++ есть лучшие способы предложить это (а именно OO и шаблоны), поэтому не имеет большого смысла использовать void* вообще, за исключением случаев, когда вы взаимодействуете C. Однако, если вы его используете, то const предлагает именно то, что он предлагает в другом месте: вам нужен (дополнительно) const_cast Чтобы иметь возможность изменить упомянутый объект, чтобы вы с меньшей вероятностью изменили его случайно.

Конечно, это полагается на то, что вы не используете C-стиль, а явные кастины C ++. Актерский состав от void* любому T* Требуется а static_cast, и это не позволяет удалить const. Анкет Так что вы можете разыграть const void* к const char* с использованием static_cast, но не char*. Анкет Это понадобится дополнительная const_cast.

Другие советы

В C ++ a Const перед указателем говорится, что данные по адресу указателя не следует изменять. т.е. это мешает кому -то делать это:

int v1 = 3;
int v2 = 4;
const int *pv = &v1;
pv = &v2 // ok;
*pv = 5; // error

Вы также можете сделать значение указателя самой const:

int v1 = 3;
int v2 = 4;
int * const pv = &v1;
*pv = 5; // ok
pv = &v2; // error

Вы также можете объединить два:

int v1 = 3;
int v2 = 4;
const int * const pv = &v1;
*pv = 5; // error
pv = &v2; // error

Есть простое различие. Как указывалось, мало необходимо использовать void* В C ++ из -за его системы лучшего типа, шаблонов и т. Д. Однако при взаимодействии с C или к системным вызовам вам иногда нужен способ указать значение без известного типа.

Как вы спрашиваете, разница между void* и const void* является подсказкой, чтобы показать вам, будет ли содержимое заостренной памяти изменено в функции, которую вы вызываете, const Это означает, что он будет иметь доступ только для чтения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top