void func(const Class *myClass) { //...
Как упоминалось в других ответах, это определение означает, что параметр myClass
указывает на экземпляр Class
, который не может быть изменен (за исключением mutable
и const_cast
) функцией. Однако переменная myClass
в теле функции может быть изменена, чтобы указывать на другой экземпляр Class
. Это деталь реализации функции.
void func(Class *const myClass) { // ...
С другой стороны, это определение означает, что параметр myClass
является указателем на экземпляр Class
, который не является константным и, следовательно, может использоваться функцией для полной манипуляции с экземпляром класса, но что myClass
Сама переменная-указатель не может быть изменена, чтобы указывать на что-либо еще в теле функции.
Один важный момент, который не был затронут другими ответами, заключается в том, что для сигнатур функций любая константная или изменчивая квалификация верхнего уровня игнорируется при рассмотрении типа функции. Это связано с тем, что параметры всегда передаются по значению, поэтому то, являются ли они постоянными или нет, влияет только на то, можно ли изменить сам параметр в теле функции и не может повлиять на вызывающего.
Таким образом, эти два объявления функций эквивалентны.
void func(Class *const myClass);
void func(Class *myClass);