Du bist nicht angemeldet.

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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

09.09.2009, 08:16

const gibts seit dem ersten Standard in C (also seit 20 Jahren^^)...

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

22

09.09.2009, 15:26

prinzipiell habt ihr recht, es ist undefiniert.

aber:

in der praxis sieht es anders aus. da gibt es normal 2 möglichkeiten.

1.) der kompiler erkennt die konstante als konstant und optimiert sie weg.
geht aber nur, wenn die addresse der konstante nicht genommen wird,
und wenn, dann darf sie nicht groß hin und her verschoben werden, sonst
kann er das nicht mehr nachvollziehen. schreibzugriffe überschreiben
den stack oder es fliegt ne exception.

2.) der kompiler erkennt was du mit der armen konstante machen willst und
entfernt das const. damit ist der schreibzugriff wieder definiert. allerdings
hast du keine möglichkeit, herauszufinden ob der kompiler das erkannt hat.

in der debugversion funzt es manchmal, in der release entweder garnicht,
oder der sinnlose zugriff wurde entfernt
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

09.09.2009, 15:35

Willst du uns damit sagen dass der compiler es entweder so oder so machen kann und man einfach nicht sagen kann was passiert!?
Inwiefern unterscheidet sich das von "undefiniert"!?

24

09.09.2009, 15:37

Nochmals:

Zitat von »"Nexus"«

Gibt es einen vernünftigen Grund, das undefinierte Verhalten herauszufordern? Wegcasten von Constness ist in 99% der Fälle der reinste Designfehler.

Und ich denke, damit ist die Diskussion, ob es in der Praxis nur manchmal undefiniertes Verhalten ist und manchmal nicht (nette Definition übrigens), hinfällig. Man sollte grundsätzlich kein const_cast einsetzen, und wenn es doch einmal einen wirklich guten Grund gibt, vergewissert man sich, dass das Objekt ursprünglich nicht const-qualifiziert war.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

25

09.09.2009, 15:37

Klar. Das meiste ist auf Compiler Ebene spezifiziert, allerdings gilt das vielleicht für die nächste Version des Compilers schon nicht mehr.
Und von anderen Compiler mal ganz zu schweigen.

Es ist nicht schwer herauszufinden, was ein Compiler mit bestimmten Einstellungen tut.. Du musst einfach immer damit rechnen, dass er es bereits bei einer kleinen Änderung bereits wieder anderst macht.

Man kann sich da einfach nicht drauf verlassen, weil der Compiler da machen darf, was er will.

Es ist also auch in der Praxis undefiniert.. (wo auch immer du hier die Grenzen zwischen Theorie und Praxis ziehst..)

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

26

09.09.2009, 16:58

theorie: der c++ standard
praxis: die kompiler-implementierungen :D

übrigens wird const_cast sogar in einem buch (ich WEIß nicht mehr welches,
könnte "more effektive c++" sein) empfohlen. hatte was mit der const
und nicht-const version von operator[] zu tun oder sowas
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

27

09.09.2009, 17:13

Zitat von »"Gotbread"«

theorie: der c++ standard
praxis: die kompiler-implementierungen :D


Ich versteh nicht ganz was du eigentlich sagen willst. Was du bisher gesagt hast entspricht in etwa:
Theorie: Straßenverkehrsordnung
Praxis: Autos. Mein Auto ist blau und manchmal ist das Licht an.

Zitat von »"Gotbread"«

übrigens wird const_cast sogar in einem buch (ich WEIß nicht mehr welches,
könnte "more effektive c++" sein) empfohlen. hatte was mit der const
und nicht-const version von operator[] zu tun oder sowas


Ja, in einem der beiden Effective C++ Bücher wird gezeigt wie man const_cast verwenden kann um die Implementierung einer überladenen const Methode in der non const Methode aufzurufen. Dabei handelt es sich um ein Beispel eines der äußerst seltenen Fälle in denen const_cast sicher und nützlich ist. Mit einer generellen "Empfehlung" hat das absolut nichts zu tun.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

28

09.09.2009, 17:21

Sagen wir es so. Ich habe sogar goto bis jetzt öfters verwendet, als const_cast..
OK, es war nur 1 mal, aber somit einiges öfters, als const_cast. ;)

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

29

09.09.2009, 19:07

ich nutze beides nicht !

@dot: jooar so kann man das auch sagen :)
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

30

09.09.2009, 19:38

gotos sind manchmal recht sinvoll ;)
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Werbeanzeige