Если указатель преобразуется в константный указатель, как вы предлагаете, то результатом этого преобразования будет временное значение, rvalue . Вы не можете прикрепить неконстантную ссылку к rvalue - это недопустимо в C ++.
Например, этот код не будет компилироваться по аналогичной причине
int i = 42;
double &r = i;
Даже если тип int
можно преобразовать в тип double
, это еще не означает, что вы можете прикрепить ссылку double &
к результату этого преобразования.
Однако константная ссылка (т. Е. Ссылка типа const на const) может быть присоединена к значению r, что означает, что этот код будет прекрасно компилироваться
int i = 42;
const double &r = i;
В вашем случае, если вы объявите свою функцию как
void PrintInt(const unsigned char* const& ptr) // note the extra `const`
код скомпилируется.