Есть ли разница между auto* p = &n
и auto p = &n
? или просто проблема стиля кодирования?
В вашем примере, где n
- это int
, разница заключается в стиле кодирования.
Однако, если n
- это экземпляр типа struct
или class
, который обеспечивает унарный operator&()
, тогда есть разница. auto *p = &n
будет диагностироваться как ошибка, если перегруженный operator&
возвращает любой тип без указателя. auto p = &n
будет диагностироваться как ошибка, только если operator&()
вернет void
. Это может быть полезно (в том смысле, что компилятору лучше диагностировать проблемы на ранних этапах), если последующий код использует &n
, дающий указатель.
По общему признанию, перегрузка operator&()
является относительно редкой (и рискованно), и перегрузка для возврата типа без указателя встречается довольно редко. Однако примеры из реальной жизни приведены здесь и здесь .