Gibt es dynamische Konstanten bzw. Speicherschutz?
-
Kann man Variablen vorübergehend in eine Konstante umwandeln, so daß die nicht ausversehen verändert wird und später diesen Schutz bei Bedarf wieder explizit aufheben?
-
Du könntest während der vorübergehenden Zeit einen Zeiger-auf-const für den Zugriff auf die Variable verwenden, z.B. indem du die entsprechenden Programmabschnitte in Funktionen verpackst, die die eigentliche Variable gar nicht sehen, sondern nur den Zeiger. Das hilft gegen versehentliches Verändern.
-
Keine Ahnung, wozu das gut sein soll:
#include <cassert> template <class T> class temp_const { T value; bool constant; public: temp_const(const T &v = T(), bool c = false) : value(v) , constant(c) { } bool isConst() const { return constant; } void setConst(bool c) { constant = c; } const T &read() const { return value; } T &read_write() { assert(!constant); return value; } };
-
So sehr ich C++ auch mag, ist es im ANSI-C-Forum keine wirkliche Lösung.
Das Einzige, was mir so auf die Schnelle einfällt, ist, die Variable durch eine Konstante zu verdecken. Etwa
int main(void) { int x = 2; { int const x_fwd_helper = x; int const x = x_fwd_helper; x = 3; /* <-- Compilerfehler! */ } return 0; }
-
seldon schrieb:
So sehr ich C++ auch mag, ist es im ANSI-C-Forum keine wirkliche Lösung.
Das kann man ja mal verwechseln. Aber vielleicht hilft das Beispiel, die mögliche Vorgehensweise zu zeigen.
-
seldon schrieb:
So sehr ich C++ auch mag, ist es im ANSI-C-Forum keine wirkliche Lösung.
Das Einzige, was mir so auf die Schnelle einfällt, ist, die Variable durch eine Konstante zu verdecken. Etwa
int main(void) { int x = 2; { int const x_fwd_helper = x; int const x = x_fwd_helper; x = 3; /* <-- Compilerfehler! */ } return 0; }
Das ist doch Supi!
#define CONSTIFY..... int main(void) { int x = 2; { CONSTIFY(int,x); x = 3; /* <-- Compilerfehler! */ } return 0; }
-
Beispielsweise mit
#define CONSTIFY(type, var) \ type const var ## _CONSTIFY_HELPER = var; \ type const var = var ## _CONSTIFY_HELPER