Преобразование double *
в const double *
в качестве типа параметра допустимо, так как у вас было много ответов, сообщающих вам об этом.
Однако есть странная ловушка, которую вы, возможно, видели раньше, которая не компилируется, что может стать причиной вашей путаницы сейчас. Если вы не видели подобного кода, который не компилируется, вы можете пропустить этот ответ, потому что он может сбить вас с толку больше, чем помочь. Я добавляю дополнительные подробности только в том случае, если вы думали, что раньше это не работало.
Иногда свойство const может быть нарушено при вставке константного типа обратно в CALLER через указатель параметра константного типа, который имеет меньшую константность в CALLER. Это приводит к ошибке компиляции, которая на первый взгляд выглядит как то же преобразование, что и вы. Например, если у вас есть функция void bar(const double **a)
и вы вызываете ее с помощью foo(&a)
в своей основной записи, вы получите ошибку компиляции, даже если кажется, что в другой ситуации вы только делаете тип более постоянным.
См. Этот вопрос для более подробной информации об этой ситуации.