Я понимаю, что  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 является указателем/ссылкой.
Пожалуйста, помогите мне понять философию этого. Благодарю.