Tôi đang cố gắng thay đổi giá trị của một biến được định nghĩa là int const như dưới đây.thay đổi giá trị của biến const trong C++
const int w = 10;
int* wp = const_cast <int*> (&w);
*wp = 20;
Giá trị của w không thay đổi và là 10 ngay cả sau khi gán, mặc dù nó hiển thị như thể cả w và wp đang trỏ đến cùng một vị trí bộ nhớ. Nhưng tôi có thể thay đổi giá trị của w, nếu định nghĩa như sau trong khi tuyên bố
int i = 10;
const int w = i;
Nếu tôi thay đổi tuyên bố của tôi để làm cho nó const như trong
const int i = 10;
Giá trị của w doesn không thay đổi.
Trong trường hợp đầu tiên, làm thế nào đến giá trị của w không thay đổi, mặc dù w và wp điểm đến vị trí nhớ cùng [đó là ấn tượng của tôi, tôi nhận được khi tôi in địa chỉ của họ]
gì khác biệt nó đến trình biên dịch mà nó xử lý cả hai trường hợp khác nhau?
Có cách nào để đảm bảo rằng w không bị mất độ chói, không phân biệt cách nó được xác định?
Nếu một đối tượng ban đầu được tạo thành 'const', thì bạn không thể (không nên)' const_cast' nó thành một 'nonst'; đó là hành vi không xác định. Nếu một đối tượng ban đầu được tạo ra không phải là 'const', bạn có thể 'const_cast' qua lại như bạn muốn. –
Trên một số triển khai, việc ghi vào đối tượng 'const' có thể làm hỏng chương trình của bạn, nếu nội dung của đối tượng nằm trong phần chỉ đọc (ví dụ' .ata'' trái ngược với '.data', trong đó dữ liệu không phải' ' ngồi). –
Không ai dường như đã hỏi câu hỏi rõ ràng - nếu bạn muốn thay đổi giá trị, tại sao bạn đánh dấu biến là 'const'? –