Можно ли использовать указатель на функцию с аргументом const в качестве функции указатель с неконстантным аргументом?

Возможно, заголовок сам по себе непонятен ... У меня есть функция f (предоставленная какой-то библиотекой), которая принимает в качестве аргумента указатель функции сигнатуры void g ( int *) , т.е.

void f(void (*g)(int*));

Однако я хотел бы использовать его с помощью функции g (которую я определил) с сигнатурой void g (const int *) .Априори я не могу понять, как это может нарушить какую-либо константную корректность, поскольку вся сигнатура f говорит о том, что g будет вызываться только с (non- const ) int * (не const ), и действительно, я могу вызвать функцию void (const int *) с не- аргумент const int * .

Но GCC жалуется и говорит:

expected 'void (*)(int *)', but argument is of type 'void (*)(const int *)'

Я не понимаю, как эта жалоба может быть законной, так что кто-нибудь знает, неверно ли мое понимание этого, или есть способ обойти это?

16
задан antony 23 November 2011 в 00:10
поделиться