Đoạn mã sau cho phép tôi thay đổi giá trị tại * p2 mặc dù p2 được khai báo bằng const.Sử dụng const và decltype với một biến con trỏ
int *p1;
const decltype(p1) p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl; // Outputs *p2: 200
Tuy nhiên, nếu tôi sử dụng "int *" thay vì "decltype (p1)", thì trình biên dịch sẽ báo lỗi.
const int * p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl;
error: assignment of read-only location ‘* p2’
*p2 = 200;
^
Tôi đang sử dụng g ++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2.
Có decltype bỏ qua const specifier khi áp dụng trên biến con trỏ?
@quantdev bạn nói đúng, tôi đã sao chép từ một câu trả lời SO khác mà không cần kiểm tra. Có giải pháp nào khác không? –
không phải là tôi biết, vấn đề thú vị .. – quantdev
@quantdev Có 'const std :: remove_reference :: type * p2 = ...;' mặc dù đó là hơi xấu xí –