c++ - songs - tag del trap
¿Cuál es la diferencia entre `auto pp` y` auto*ppp`? (2)
En el ejemplo particular que muestra, no hay diferencia. Pero imagina que luego agregarías dos calificativos const como el siguiente:
const auto pp = p;
const auto *ppp = p;
¿Sigue siendo el mismo? Resulta que esto es idéntico a
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly
porque en auto pp = p , auto coincide con int* como un todo, y const modifica lo que está a su izquierda (o lo que está a su derecha, si no hay nada a su izquierda). Al contrario, en auto *ppp = p , auto coincide con int , y esto es a lo que se aplica const .
Debido a esta notable diferencia y porque deberíamos usar las variables const siempre que sea posible, le aconsejaría que siempre use auto* cuando use la deducción de tipo para las variables de puntero. No hay forma de constar-calificar el puntero en lugar del pointee, y si quiere constar-calificar ambos, esto es posible por
const auto * const pppp = p;
que no funciona sin el * .
int foo = 11;
int *p = &foo;
auto pp = p;
auto *ppp = p;
cout << pp << endl;
cout << ppp << endl;
Este programa producirá la misma salida para pp y ppp , pero ¿por qué? auto deduce que la variable debe ser int , por lo que creo que la declaración de ppp es correcta. Pero pp y ppp tienen el mismo valor ...
Salida:
0x61fefc
0x61fefc
No hay diferencia entre auto y auto * en este caso particular. En el caso de auto pp = p; el tipo se deducirá a int * mientras que en el caso de auto *ppp = p; tipo se deducirá a int .
Para las variables, especifica que el tipo de la variable que se está declarando se deducirá automáticamente de su inicializador. [...]
Tenga en cuenta que a diferencia de auto el auto * solo deducirá los tipos de puntero.