В конкретном примере, который вы показываете, нет никакой разницы.Но представьте, что позже вы добавите два 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
переменные, когда это возможно, я 'd советую всегда использовать auto*
при использовании вывода типа для переменных-указателей.Невозможно const
-квалифицировать сам указатель вместо pointee, и если вы хотите const
-квалифицировать оба, это возможно с помощью
const auto * const pppp = p;
, который не работает без*
.