Ответ 1
В конкретном примере, который вы показываете, нет никакой разницы. Но представьте, что позже вы добавите два const
следующим образом:
const auto pp = p;
const auto *ppp = p;
Это все то же самое? Оказывается, это идентично
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly
потому что в auto pp = p
auto
соответствует int*
в целом, а const
изменяет то, что слева от него (или то, что справа, если ничего не осталось слева). Напротив, в auto *ppp = p
, auto
соответствует int
, и это то, к чему относится const
.
Из-за этой заметной разницы и из-за того, что мы всегда должны использовать const
переменные, я бы посоветовал вам всегда использовать auto*
при использовании вычитания типа для переменных указателя. Нет никакого способа, чтобы const
-qualify сам указатель вместо pointee, и если вы хотите const
-qualify, это возможно
const auto * const pppp = p;
который не работает без *
.