Ĺadny brzuch
Witam,
W ostatnim czasie chciałem przypomnieć sobie trochę język C++, którego dawniej trochę próbowałem się uczyć. W tym celu zacząłem czytać Symfonię C++. Standard. W niej, na stronie 323 natrafiłem na taki mniej więcej przykład:
#include <iostream> using namespace std; int main(){ double zmienna = 0; const double stala = 3.14; double *wsk_do_zmiennej = &zmienna; const double *wsk_do_stalej = &stala; const double *wsk2_do_stalej; cout << "Na poczatku, stala = " << stala << endl; wsk2_do_stalej = wsk_do_zmiennej; wsk_do_zmiennej = const_cast<double *>(wsk_do_stalej); *wsk_do_zmiennej = -333; cout << "Potem -----> stala = " << stala << endl; }
Kompilator nie zgłasza żadnych zarzutów, ale po uruchomieniu wynik okazuje się taki:
Na poczatku, stala = 3.14 Potem -----> stala = 3.14
Czyli stała, nie została jednak zmodyfikowana. Wie ktoś o co chodzi? Stara wersja kompilatora raczej odpada...
EDIT
Znalazłem rozwiązanie. Okazuje się, że wystarczy dodać specyfikator volatile do stałej (oraz wskaznika do niej ofc).
Użytkownik informatyka1 edytował ten post 04 sierpień 2009, 17:56
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
W ostatnim czasie chciałem przypomnieć sobie trochę język C++, którego dawniej trochę próbowałem się uczyć. W tym celu zacząłem czytać Symfonię C++. Standard. W niej, na stronie 323 natrafiłem na taki mniej więcej przykład:
#include <iostream> using namespace std; int main(){ double zmienna = 0; const double stala = 3.14; double *wsk_do_zmiennej = &zmienna; const double *wsk_do_stalej = &stala; const double *wsk2_do_stalej; cout << "Na poczatku, stala = " << stala << endl; wsk2_do_stalej = wsk_do_zmiennej; wsk_do_zmiennej = const_cast<double *>(wsk_do_stalej); *wsk_do_zmiennej = -333; cout << "Potem -----> stala = " << stala << endl; }
Kompilator nie zgłasza żadnych zarzutów, ale po uruchomieniu wynik okazuje się taki:
Na poczatku, stala = 3.14 Potem -----> stala = 3.14
Czyli stała, nie została jednak zmodyfikowana. Wie ktoś o co chodzi? Stara wersja kompilatora raczej odpada...
EDIT
Znalazłem rozwiązanie. Okazuje się, że wystarczy dodać specyfikator volatile do stałej (oraz wskaznika do niej ofc).
Użytkownik informatyka1 edytował ten post 04 sierpień 2009, 17:56