AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C++] Pointer-Problem: illegal indirection
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] Pointer-Problem: illegal indirection

Ein Thema von Matze · begonnen am 7. Nov 2007 · letzter Beitrag vom 7. Nov 2007
Antwort Antwort
Seite 3 von 3     123   
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#21

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 21:41
Zitat von Khabarakh:
Die normale Klammer "(a)" ist kein Operator (jedenfalls habe ich noch nie gelesen, dass sie als ein solcher irgendwo definiert wird), in einer prozessornäheren UPN-Schreibweise würde sie ja auch wegfallen. Überladen lässt sie sich einmal als Cast-Operator "(a)b" und einmal als Function-Call-Operator "f()". Zum Komma sage ich lieber nichts, denn nachdem ich wie du gerade zum ersten Mal überhaupt von ihm gehört habe, will ich ihn bis morgen lieber wieder vergessen .
Ja, ich habe vor ein paar Tagen zum ersten mal den Komma-Operator ernsthaft in einer Funktion benutzt, sogar relativ sinnvoll, und ich fühle mich ganz schmutzig. Dabei habe ich ihn nicht einmal überladen. Ich habe den entsprechenden Bereich stilecht mit
Code:
// HERE BE DRAGONS
kommentiert. Seltsamerweise habe ich ein paar Tage später (wenn ich so drüber nachdenke, es war heute) Code von jemand anderem gesehen, der auch auf seltsame Weise Gebrauch von diesem Operator machte.

Aber so ist das eben. Der Sprache selbst fehlen so viele praktische und heutzutage selbstverständliche Features, dafür hat sie so viele obszöne und esoterische Features, dass man damit fast alles machen kann, auch Dinge hinzufügen, die so nie vorgesehen waren, oder sich etwas syntaktische Vereinfachung verschaffen, indem man sie zweckentfremdet. Aber das lässt man lieber andere machen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#22

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 21:42
Zitat von Khabarakh:
Wenn ich das richtig sehe, enthält das Array ja gar keine Zeiger, sondern direkt die Objekte (so langsam verstehe ich, warum C++ mit diesem Konzept ziemlich allein auf weiter Flur steht *g*)
Ja? Da bin ich aber gespannt


Vom Überladen würde ich auch die Finger lassen, bis du einen guten Grund findest. Wenn du nicht unbedingt mathematisch orientierte Klassen schreibst (für die auch nur die arithmetischen Operatoren zu überladen wären, und das ist ja noch im Rahmen), wirst du das ohnehin kaum selbst machen müssen. Für die meisten Szenarien, in denen eine Überladung weiterer Operatoren sinnvoll wäre, gibt es in der STL (und natürlich in Boost) schon fertige Implementationen.

Daß man ->, [] und das unäre * überladen kann, ist übrigens für Iteratoren und Smart-Pointer essentiell. Letztere sind übrigens, wenn sinnvoll eingesetzt, so bequem wie ein Garbage-Collector, ohne mit dessen Nachteilen behaftet zu sein

Es gibt allerdings tatsächlich einige Operatoren, die man nie überladen sollte, z.B. &&, || und , . Weiß der Geier, weshalb die Möglichkeit überhaupt besteht.

Und verkettete Listen indiziert man nicht einmal in C++


Zitat von OregonGhost:
Der Sprache selbst fehlen so viele Features, dafür hat sie so viele obszöne und esoterische Features, dass man damit fast alles machen kann, auch Dinge hinzufügen, die so nie vorgesehen waren
Das ist doch gerade das schöne


Zitat von OregonGhost:
Aber das lässt man lieber andere machen.
Ich mache das eigentlich ganz gerne
Moritz
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#23

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 21:50
Zitat von DMW:
Zitat von Khabarakh:
Wenn ich das richtig sehe, enthält das Array ja gar keine Zeiger, sondern direkt die Objekte (so langsam verstehe ich, warum C++ mit diesem Konzept ziemlich allein auf weiter Flur steht *g*)
Ja? Da bin ich aber gespannt
Zugegeben, das ist eins der Features, das ich in dieser Form in anderen Sprachen vermisse. Auch wenn das mit Polymorphie schon wieder einen größeren Aufwand erfordert (jedoch, anders als in anderen Sprachen, keineswegs unmöglich und mit ein wenig Template-Code sogar relativ elegant zu erreichen ist).
Zitat von DMW:
Für die meisten Szenarien, in denen eine Überladung weiterer Operatoren sinnvoll wäre, gibt es in der STL (und natürlich in Boost) schon fertige Implementationen.
Man kann sich sicherlich darüber streiten, ob es sinnvoll ist, die Shift-Operatoren als Stream-Operatoren zu überladen oder den Modulo für Stringformatierung
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#24

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 21:54
Zitat von OregonGhost:
Man kann sich sicherlich darüber streiten, ob es sinnvoll ist, die Shift-Operatoren als Stream-Operatoren zu überladen
Da braucht man gar nicht zu streiten. Ich finde die Dinger so grauenvoll wie du


Zitat von OregonGhost:
oder den Modulo für Stringformatierung
Du meinst in printf? Das ist aber keine Operatorüberladung, sondern ein Relikt aus C (deshalb gibts da auch eigentlich keine Typsicherheit - aber auch das läßt sich mit C++ natürlich ändern ). Und ich finde es _viel_ besser als die Streamoperatoren
Moritz
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#25

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 21:59
Nein, boost::format verwendet den Modulo-Operator dafür. Nach dem Motto
Code:
boost::format("%1%, %2%") % "Hallo" % "Welt"
Hat interessante Vorteile, speziell im Vergleich zu Stream-Operatoren oder dem QString::arg() (oder, davon abgesehen, gegenüber printf). Ist in meinen Augen aber noch mehr zweckentfremdet.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#26

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 22:05
Ich weiß nicht was ihr alle gegen einen []-Operator bei verketteten Listen habt. Man muss doch nicht bei jedem Zugriff die ganze Kette durchlaufen.
Code:
TStringList strl;
strl.add("Hallo");
strl.add("Welt");
for(int i = 0; i<strl.count(); i++)
  cout<<strl[i]<<"\n";
Den Such-Zeiger in der Liste muss man ja nicht jedes mal wieder an den Anfang setzen.
Aber kann schon sein, dass es bei verketteten Listen nicht benutzt wird.
Ein anderes Beispiel, wo es sicher benutzt wird, wäre zum Beispiel eine Klasse für Vektor-Berechnungen.
v3 = v1 + v2;
anstatt
v3 = v1.add(v2);
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#27

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 22:06
Da wäre das Komma doch passender gewesen.. *g*
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#28

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 22:11
Zitat von OregonGhost:
Nein, boost::format verwendet den Modulo-Operator dafür. Nach dem Motto
Code:
boost::format("%1%, %2%") % "Hallo" % "Welt"
Stimmt, das gibts ja auch noch. Aber auch da präferiere ich printf.

boost.serialization verwendet auch <<, >> und & für das Streamen eines Wertes
Moritz
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#29

Re: [C++] Pointer-Problem: illegal indirection

  Alt 7. Nov 2007, 22:18
Naja, printf ist halt nicht zu gebrauchen, wenn man eine Anwendung international gestalten will, unterstützt keine benutzerdefinierten Typen und auch keine umgeleiteten Streams. Damit ist es zumindest für meinen Entwickleralltag vollkommen nutzlos. Streams sind, was Internationalisierung betrifft, natürlich auch nicht zu gebrauchen. Praktischerweise kann man boost::format aber in Streams schieben.
Hmm.
Wenn ich so drüber nachdenke... DESHALB hat man wohl die Shift-, sprich Schiebe-Operatoren dafür benutzt... um Dinge in den Stream hineinzuschieben

Was DAX' scherzhafte Bemerkung zum Kommaoperator angeht: Ich tippe mal, dass das auch der erste Gedanke der Boost-Leute war. Blöderweise kann man dann einen format-Aufruf nicht als Parameter übergeben, weil das Komma dann als Parameter-Trenner statt als Operator interpretiert wird.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz