Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <conio.h> #include <iostream> #include "windows.h" using namespace std; int main() { const int a = 4; const int* b = &a; cout << a << endl; int* c = const_cast<int*>(b); *c = 5; cout << a << endl; getch(); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
; 8 : const int a = 4; 0001e c7 45 f8 04 00 00 00 mov DWORD PTR _a$[ebp], 4 ; 9 : const int* b = &a; 00025 8d 45 f8 lea eax, DWORD PTR _a$[ebp] 00028 89 45 ec mov DWORD PTR _b$[ebp], eax ; 11 : cout << a << endl; 00035 6a 04 push 4 |
Zitat
Wenn ich im ganzen Code nur eine Konstante verwende und diese ausgib, erscheinen die ersten 2 Zeilen des hier geposteten Assemblycodes ebenfalls. Das deutet für mich darauf hin, dass die Konstante irgendwo irgendwelchen Speicher belegt. Laut Stroustrup sollte sie das aber nicht, wenn zur Compilezeit klar ist, welchen Wert sie hat und wenn nicht auf die Adresse zugegriffen wird.
Zitat von »"defaultplayer"«
Ist es eig. in jedem Fall undefiniertes Verhalten, wenn man irgendwie versucht, eine Konstante zu ändern?
Zitat
Zitat
Ist es eig. in jedem Fall undefiniertes Verhalten, wenn man irgendwie versucht, eine Konstante zu ändern?
Jup.
Zitat von »"defaultplayer"«
Zitat
Zitat
Ist es eig. in jedem Fall undefiniertes Verhalten, wenn man irgendwie versucht, eine Konstante zu ändern?
Jup.
Schade.
Hab auch dieses Problem bis jetzt noch nicht behoben. Wenn das so ist, werd ich es wohl nach noch ein wenig rumspielen sein lassen.
Zitat von »"defaultplayer"«
Ja, ist kein richtiges Problem. Ich wollte einfach mal, dass die Konstante nicht konstant ist
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <conio.h> #include <stdio.h> int main() { const int a = 4; int* c; printf("%d\n", a); c = (int*)&a; // <<<<<< *c = 5; printf("%d\n", a); getch(); } |
Werbeanzeige