У меня есть эта очень простая тестовая функция, которую я использую, чтобы выяснить, что происходит с квалификатором const.
int test(const int* dummy)
{
*dummy = 1;
return 0;
}
Это вызывает ошибку GCC 4.8.3. Но это компилируется:
int test(const int* dummy)
{
*(char*)dummy = 1;
return 0;
}
Итак, похоже, что спецификатор const работает только в том случае, если я использую аргумент без кастования другому типу.
Недавно я видел коды, которые использовали
test(const void* vpointer, ...)
По крайней мере, для меня, когда я использовал void *, я склонен использовать его для char * для арифметики указателя в стеках или для трассировки. Как const void * запретить функции подпрограмм изменять данные, на которые указывает vpointer?