Я изучаю указатели, константы. Я в какой-то момент смущен. Я узнал, что назначение C++ указателю nonconst запрещено в C++, но его можно решить с помощью const_cast. Все нормально.Назначение адреса nonconst указателю const
Однако присвоение адреса переменной nonconst указателю const допускается. Я не понимал, почему это разрешено. Посмотрите приведенный ниже пример. В этом примере ptr является указателем на const int. Однако значение, которое ptr указывает на изменения. Здесь есть противоречие, потому что значение const int, которое ptr указывает на изменения. Можете ли вы объяснить это противоречие, или если я ошибаюсь, можете ли вы объяснить, почему?
#include <iostream>
using namespace std;
int main() {
int year = 2012;
const int* ptr = &year;
year=100;
year=101;
cout << *ptr;
// 101 is printed, the value ptr points to change whenever year changes
return 0;
}
'Const INT * ptr', просто означает, не может изменить значение с помощью' ptr', вы не можете предотвратить другие модификации пути ... – songyuanyao
OMG, на самом деле ? то это означает, что он запрещает только модификацию через разыменование ptr – metis
Да, это запрещает только разыменование ptr для записи. BTW: проверка const выполняется в кратчайшие сроки, а в качестве компилятора невозможно проверить другие модификации. – songyuanyao