Poniższy kod pozwala mi zmienić wartość na * p2, mimo że p2 jest zadeklarowane przy const.Używanie const i decltype ze zmienną wskaźnika
int *p1;
const decltype(p1) p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl; // Outputs *p2: 200
Jednak jeśli użyję "int *" zamiast "decltype (p1)", kompilator zgłosi błąd.
const int * p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl;
error: assignment of read-only location ‘* p2’
*p2 = 200;
^
Używam g ++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2.
Czy decltype zignoruje specyfikator const, gdy zostanie zastosowany do zmiennej wskaźnika?
@ Quantdev masz rację, skopiowałem z innej odpowiedzi SO bez testowania. Czy istnieje inne rozwiązanie? –
Nie wiem, interesujący problem .. – quantdev
@quantdev Istnieje "const std :: remove_reference :: type * p2 = ...;' chociaż jest to nieco brzydkie –