Когда я запускаю этот код в MS VS С++ 2010:
#include <iostream>
int main() {
const int a = 10;
const int *b = &a;
int *c = (int *)b;
*c = 10000;
std::cout << c << " " << &a << std::endl;
std::cout << *c << " " << a << " " << *(&a) << std::endl;
return 0;
}
Вывод:
0037F784 0037F784
10000 10 10
Мотивацией для написания этого кода было это предложение от "языка программирования С++" от Stroustrup: "Можно явно удалить ограничения на указатель на const путем явного преобразования типов".
Я знаю, что попытка изменить константу концептуально неверна, но я нахожу этот результат довольно странным. Может ли кто-нибудь объяснить причину этого?