Я понимаю, что const_cast
работает с указателями и ссылками.
Я предполагаю, что вход в const_cast
должен быть указателем или ссылкой. Я хочу знать, почему он не удаляет константу, если вход является указателем/ссылкой на const int
?
Следующий код работает так, как ожидалось.
-
const_cast
с многоуровневыми указателямиint main() { using std::cout; #define endl '\n' const int * ip = new int(123); const int * ptr = ip; *const_cast<int*>(ptr) = 321; cout << "*ip: " << *ip << endl; // value of *ip is changed to 321 }
Но когда я пытаюсь указать указатель на
const int
или ссылку наconst int
, значение, похоже, не изменится. -
const_cast
со ссылкой на const intint main() { using std::cout; #define endl '\n' const int i = 123; const int & ri = i; const_cast<int&>(ri) = 321; cout << "i: " << i << endl; // value in 'i' is 123 }
-
const_cast
с указателем на const intint main() { using std::cout; #define endl '\n' const int i = 123; const int * ri = &i; *const_cast<int*>(ri) = 321; cout << "i: " << i << endl; // value in 'i' is 123 }
(1) работает так, как ожидалось, но я не могу понять, почему (2) и (3) не работают так, как я думаю, хотя вход в const_cast
является указателем/ссылкой.
Пожалуйста, помогите мне понять философию этого. Благодарю.