Ответ 1
В конце концов, я не пытаюсь изменить постоянное значение
Неявное преобразование из "указателя в константу" в "указатель на не-const" недопустимо, так как это позволит изменить постоянное значение. Подумайте о следующем коде:
const int x = 1;
const int* cp = &x; // fine
int* p = cp; // should not be allowed. nor int* p = &x;
*p = 2; // trying to modify constant (i.e. x) is undefined behaviour
BTW: для вашего кода примера использование const_cast
будет прекрасным, поскольку cp1
указывает на неконстантную переменную (т.е. x1
).
p2 = const_cast<int*>(cp1);