Hej
Próbuję utrwalić sobie wiedzę z rzutowania i zdziwiłem się jak mi w programie taki oto output wyskoczył:
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
const int a = 20;
int* c = const_cast<int *>(&a);
*c = 40;
cout << "new value is " << *c << endl;
cout << "new value is " << a << endl;
cout << "addr of a = " << &a << endl;
cout << "addr of a = " << c << endl;
return 0;
}
Output:
new value is 40
new value is 20
addr of a = 0x7ffccdb8c904
addr of a = 0x7ffccdb8c904
Próbuję sobie to jakoś wytłumaczyć i strzelam, że w komórce pamięci 0x7ffccdb8c904 jest wartość tak naprawdę nowa czyli 20. Natomiast dla zmiennej 'a' kompilator wypisał mi 40 zamiast 20 bo już w momencie kompilacji jest ustawione 20. Czy tak można wyjaśnić to zjawisko? A może jednak mamy tu do czynienia z undefined behaviorem i to że mi akurat powiodło się w kompilatorze wandbox czy onlinegdb to nic nie znaczy. Ogólnie spodziewałem się podczas kompilacji jakeigoś warninga a program, że się scrashuje.