Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

const_cast

Ostatnio zmodyfikowano 2018-01-24 13:54
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
const_cast
» 2018-01-24 13:36:01
Ciekawa sprawa, której nie rozumiem...

Jak to się dzieje, że mimo tego samego adresu wartość *wskaźnik oraz liczbaPI jest różna ... Czy to wszystko mieści się w definicji Undefined Behaviour?
I swoją drogą na linuksie mam kompilator umożliwiający w ten sposób zmienić wartość const ^^ czyli dostanę, że liczbaPI zmieniła wartośc i wynosi 8 ^^


C/C++
#include <iostream>
using namespace std;

int main()
{
    const double liczbaPI = 3.14;
    const double * wskDoStalej = & liczbaPI;
   
    double * wskaznik = const_cast < double *>( wskDoStalej ); //przypisujemy dane ze stałej do zwykłego wskaźnika
   
    cout << * wskaznik << endl; //wypisze 3.14
   
    * wskaznik = 8;
   
    cout << wskaznik << " " << & liczbaPI << endl; //wypisze 3.14
    cout << * wskaznik << " " << liczbaPI << endl; //wypisze 3.14
   
   
    return 0;
}
P-168962
mateczek
» 2018-01-24 13:47:27
C/C++
const double liczbaPI = 3.14; //tego nie wolno ci zmienić i tyle. !!!!
P-168963
pekfos
» 2018-01-24 13:48:34
Zmienne nie muszą istnieć w pamięci, tym bardziej stałe. Pobranie adresu zmiennej wymusza, by zmienna przynajmniej przez jakiś czas znajdowała się w pamięci. Stała nie może się zmieniać, więc jej wartość może być podstawiona w miejsce użycia.

I swoją drogą na linuksie mam kompilator umożliwiający w ten sposób zmienić wartość const ^^
Jeśli mam strzelać, to dla takiego int to już nie zadziała.
P-168964
Anim
Temat założony przez niniejszego użytkownika
» 2018-01-24 13:54:25
@mateczek wiem, że nie wolno... moje powyższe było trochę w ramach ciekawostki :)

@pekfos dziękuję za wytłumaczenie. Faktycznie, dla int już nie działa :)
P-168966
« 1 »
  Strona 1 z 1