const_cast czy moze posluzyc do edycji stalego obiektu ?

0

Witam wszystkich.
Załapałem główne zastosowanie tego rzutowania ale czy nie można nim oszukiwać kompilatora. Wklepałem więc krótki kawałek kodu i bardzo się zdziwiłem.

#include <iostream>
using namespace std;

int main()
{
    const int stala = 5;

    int *wsk = const_cast<int*>(&stala);

    *wsk = 150;

    cout.width (10);
    cout << "wsk " << wsk << " " << *wsk << "\n";
    cout.width (10);
    cout << "stala " << &stala << " " << stala << "\n";

    return 0;
}

a oto wynik:

  wsk 0x28ff08 150
stala 0x28ff08 5

Nie rozumiem skoro wskaźnik pokazuje na ten sam adres co stała to dlaczego wyświetlają się dwie różne wartości pod tym adresem?

0

Wydaje mi się że to zależy od kompilatora.W CodeBlock otrzymałem takie same wyniki jak ty, natomiast w Visual Studio 2008 oba wskaźniki zwracały wartość 150.

0

jest to tak zwane, niezdefiniowane zachowanie.

0

Generalnie jeżeli masz const int/ byte/ char/ whatever co nie jest tablicą to GCC zwykle zamienia wszystkie wystąpienia w kodzie na etapie kompilacji. bleble = stała byłoby zamienione wprost na bleble = 5.

1 użytkowników online, w tym zalogowanych: 0, gości: 1