Konstante unfähig
-
Guten Abend(Naja Schöne Nacht^^),
Ich bin gerade in meinem Buch beim Thema const - Konstanten.
Daher habe ich viel darüber gelesen und gleich darauf probierte ich das mal etwas selber aus.Hier(Dieser Code ist nur teilweise rausgeschnitten worden!):
//................. const int a = 2005; if(std::cin>>a) { //Sonstiges std::cout<<"..."<<std::endl; }danach kommen sehr viele Fehler... ohne const geht es,aber ich meine,dass man normaler weise const nicht braucht,aber trodzdem wollte ich es mal probieren

Ich hoffe und bitte,dass ihr mir helfen könnt

Gute Nacht,
Martin
-
Hallo
const int a = 2005; if(std::cin>>a)Merkt du da nicht schon selbst einen logischen Fehler?
Ansonsten lies dir doch mal genau die Compilermeldungen durch, die hauen dir genau das Problem um die Ohren.bis bald
akari
-
akari schrieb:
Hallo
const int a = 2005; if(std::cin>>a)Merkt du da nicht schon selbst einen logischen Fehler?
Ansonsten lies dir doch mal genau die Compilermeldungen durch, die hauen dir genau das Problem um die Ohren.bis bald
akariSorry,aber da steht doch nichts

Mein IDE(Codeblocks) zeigt pro neues kompilieren etwas anderes an.. screen folgt bald.
-
Hallo
wie du schon selbst sagst, definierst du eine Kostante. Konstanten haben die Eigenschaft, konstant zu sein. Das heißt nach der Deklaration und Initialisierung kannst du so einer Konstanten keinen neuen Wert mehr zuweisen. Auch nicht durch Eingaben des User. Du kannst ausschließlich lesend darauf zugreifen.
bis bald
akari
-
Oder man castet das const via const_cast<>() weg...hier wohl aber eher unpassend.

-
CodeFinder schrieb:
Oder man castet das const via const_cast<>() weg...
zu welchem zweck?
-
CodeFinder schrieb:
Oder man castet das const via const_cast<>() weg...hier wohl aber eher unpassend.

Ist undefiniertes Verhalten

-
camper schrieb:
CodeFinder schrieb:
Oder man castet das const via const_cast<>() weg...
zu welchem zweck?
lol, Wie ich schon sagte: "hier wohl aber eher unpassend." Ich wollte es nur erwähnen, da akari schrieb:
"Konstanten haben die Eigenschaft, konstant zu sein."@Info:
Nein das ist kein undefiniertes Verhalten!PS: Ich wollte das nur anmerken, pernsönlich finde ich den cast auch nicht soo gelungen.
So an alle noch ne gute Nacht

-
CodeFinder schrieb:
@Info:
Nein das ist kein undefiniertes Verhalten!Doch ist es. const darf man nur wegcasten, wenn die Variable eigentlich garnicht const ist, sondern zu dem Zeitpunkt nur logisch gerade const ist. Da es sich hier um eine explizit als const angelegte Variable handelt dürfte der Compiler sie zum Beispiel in einem ROM unterbringen. Was denkst Du, wie nun genau das Verhalten definiert sein soll, wenn Du versuchst wie const_cast den ROM zu beschreiben?
-
Sehr anschaulich wird das, wenn du eine const int Variable als Template-Parameter nutzt:
#include <iostream> template <int i> struct int_ { static const int value = i; }; template <int i> const int int_<i>::value; int main () { const int n = 42; /// Hier fängt der böse Teil an ... int* p = const_cast<int*> (&n); *p = 43; /// ... und hier hört er auf. std::cout << int_<n>::value; }Bin mir nicht sicher, ob das alles richtig ist, aber ich weiß, dass beim letzten mal, als ich das ausprobiert hat der vielsagende "Internal Compiler Error" vom gcc kam. Wohlgemerkt, ohne den bösen Teil sollte alles legaler Code sein.