Nu har jeg ikke kigget MS C++ efter i sømmene, men i dit tidligere eksempel
med class A og class B kan man godt type caste og rette værdien. Hvilket får
mig til at tro at MS C++ ikke opretter et readonly område til din variabel i
dette eksempel, men blot optimer den om til en #define i 8 og på den måde
putter den ind i kodeblokken som (hvis jeg husker ret) er readonly under
Windows.
Hvis (og jeg siger hvis) mine antagelser er rigtige, så er det altså ikke
fordi at MS C++ laver const variabler readonly, men fordi den optimerer dem
at man ikke kan skrive til dem, hvilket igen betyder at man i praksis ikke
har readonly variabler på codeniveau i C++.
Nå denne diskussion er vist ved at dreje ud på et spor, hvor det ikke
længere har nogen praktisk betydning for det oprindelige spørgsmål, men det
har været hyggeligt.. Jeg vil stoppe nu..
mvh Ruben Nørgaard
"Mogens Hansen" <mogens_h@dk-online.dk> wrote in message
news:b148sr$237b$1@news.cybercity.dk...
>
> "Bjarke Dahl Ebert" <bebert@tiscali.dk> wrote
>
> > I alle de C++-compilere jeg kender, har const kun betydning på
> compiletime -
> > det er ikke en "hardware-beskyttelse" af værdien.
>
> Har du kigget ordentlig efter ?
>
> Så vidt jeg husker bruger du Microsoft Visual C++ V6.0 (bl.a. ??).
> Prøv:
>
> <code>
> #include <iostream>
>
> const int i = 8;
>
> int main()
> {
> using namespace std;
>
> cout << i << endl;
> const_cast<int&>(i) = 2;
> cout << i << endl;
> }
> </code>
>
> På min maskine skriver den
>
> G:\cpp\fnyt11\Debug>fnyt11.exe
> 8
>
> inden der kommer en message-box med
>
> ---------------------------
> fnyt11.exe - Application Error
> ---------------------------
> The instruction at "0x00401590" referenced memory at "0x0046e01c". The
> memory could not be "written".
>
>
> Click on OK to terminate the program
> Click on CANCEL to debug the program
> ---------------------------
> OK Cancel
> ---------------------------
>
> Intel C++ V5.0 for Windows skriver:
>
> G:\cpp\fnyt11\Debug>fnyt11.exe
> 8
> 8
>
> og det samme gør Borland C++Builder V6.0.
>
> Og altsammen er helt i orden.
>
> Venlig hilsen
>
> Mogens Hansen
>
>