Article View: de.comp.lang.c++
Article #1596Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen
From: Ullrich von Bassewitz
Date: Wed, 21 Feb 1996 22:43
Date: Wed, 21 Feb 1996 22:43
175 lines
8757 bytes
8757 bytes
Dietmar Kuehl (kuehl@uzwil.informatik.uni-konstanz.de) wrote:
> Ich halte die technischen Newsgroups, zu denen ich trotz der zahllosen
> "Off-Topic" Artikel de.clc++ zaehle, fuer ein Diskussiosforum und nicht
> fuer eine kostenlose Hotline. Daher werde ich auch in Zukunft
> stilistische Verbesserungsvorschlaege machen, auch oder gerade wenn
> diese von einigen als kontrovers angesehen werden. Wem das nicht
> passt, dem empfehle ich, sich mit dem "Author Kill" des Newsreaders
> vertraut zu machen bzw. sich tatsaechlich eine Hotline zu
> organisieren...
Wie ich geschrieben habe (ich hoffe das kam raus) hat mich der Artikel von
Harald Fuchs viel mehr gestoert als Deiner, vor allem wegen seines Arguments
"schaut mal den Dieter an, was der fuer C++ tut, und dann kommt einer und
will ihn kritisieren". (Wenn ich mal neugierig fragen darf: Was tust Du
ueberhaupt fuer C++? Ich gebe ehrlich zu, dass ich keine Ahnung habe. Ich
gebe auch zu, dass ich nichts fuer C++ tue, ausser es eben zu benutzen...)
Trotzdem denke ich immer noch, dass Deine "Stilhinweise" falsch sind. Sie
moegen in einer bestimmten Umgebung richtig sein, aber eben nur dort.
> Als allererstes sei auf die potentiellen Speicherloecher hingewiesen.
[...]
char* verursachen dabei nicht mehr Probleme als dynamische Objekte, vor
allem deshalb, weil char* nicht unbedingt dynamischen Speicher impliziert.
D.h. das Problem ist kein spezifisches Problem von Zeigern auf chars und
damit auch *kein* Grund zur Kritik an diesen.
Ausserdem steht es jedem frei Exceptions zu verwenden oder nicht (derzeit
duerfte die Mehrzahl der Programmierer exceptions nicht oder nicht
regelmaessig verwenden, schon alleine wegen der mangelnden Verfuegbarkeit).
Was Du sagt trifft also auf ein bestimmtes Umfeld zu. Dieses Umfeld mag bei
Dir zutreffend sein, das gilt jedoch keinesfalls allgemein und ist schon gar
kein Grund, Kritik an ein paar Zeilen Beispielcode zu ueben, bei denen Du
das Umfeld ueberhaupt nicht kennst.
> Ein weiteres Argument, das mehr in richtung der "reinen Lehre" geht,
> ist, dass man die Abstraktionen, die man verwendet, beim Namen nennt:
Und was ist mit "unsigned Counter"? Laut Deiner Argumentation ist das dann
ploetzlich auch nicht mehr zulaessig, weil "unsigned" eine Repraesentation
ist ("Counter" waere die Abstraktion).
Dieses Argument halte ich fuer noch schwaecher als das erste (das man
zumindest in einem bestimmten Bereich als zutreffend bezeichnen konnte).
> Es ist zeifelsfrei richtig, dass es dafuer gute Gruende gibt, aber
> nenne mir bitte einen, der 'char *string' rechtfertigen koennte! Die
> Abstraktion wird aus dem (schlechtgewaehlten) Namen der Variablen und
> nicht aus dem Typ klar! Dafuer gibt, IMHO, absolut keinen Grund!
Dass Du keinen Grund erkennen kannst liegt daran, dass es sich eben nur um
ein paar Zeilen Code gehandelt hat (und deshalb ist IMHO Kritik aufgrund von
ein paar Zeilen auch recht schwierig). Ich kenne das gesamte Programm
natuerlich auch nicht, aber ich kann aus dem Stegreif einen ganzen Stall
moeglicher Gruende fuer das char* liefern:
* Low-Level Code
* Interface mit anderen Sprachen (C z.B.)
* Performance (class string ist um *Klassen* langsamer als eine Uebergabe
eines Parameters als char*).
* Bestimmte Repraesentation notwendig (z.B. Zeiger auf Shared Memory,
Objekte im Shared Memory gehen naemlich nicht bzw. nicht portabel).
* usw.
Wohlgemerkt: Ich weiss nicht ob es einer dieser Gruende ist. Aber jeder
einzelne dieser Gruende kann eine Verwendung von char*'s rechtfertigen.
Bleibt der Name der Variable:
> Wenn diese Klasse dann doch mal verwendet werden soll, ist man erstmal
> damit beschaeftigt, diesen Namen zu aendern (OK, mit Namespaces ist er
> in einem anderen Namespace, aber ich vermute dass 'using std;' zwar
> schlecht, aber gaengig sein wird).
Wie Du wahrscheinlich auch weisst residieren die Namen fuer Typen und die
von Variablen in unterschiedlichen Namespaces (die Low-Level Erklaerung ist:
Der Compiler hat unterschiedliche Symboltabellen fuer die Namen von Typen
und Variablen. Das ist wegen der C Kompatibilitaet notwendig).
D.h. entgegen Deiner Behauptung gibt es keinerlei(!) Konflikte wenn Typnamen
als Variablennamen verwendet werden (vorausgesetzt natuerlich, man braucht
nicht den Namen des Typs zusaetzlich zu dem der Variablen, wovon hier nicht
auszugehen ist).
Wer's nicht glaubt, der soll einfach das folgende Programm durch seinen
Lieblingscompiler laufen lassen:
class Lalle { public: int I; };
Lalle A (Lalle Lalle)
{
return Lalle;
}
int main ()
{
Lalle B;
A (B);
return 0;
}
Es gibt die von Dir an die Wand gemalten Probleme mit dem Namen also definitiv
nicht. Dazu kommen noch mehr Punkte:
* Vielleicht ist die Verwendung der Standard C++ Bibliothekt ueberhaupt
nicht geplant, weisst Du's?
* Namespaces (die genauso wie Exceptions zum neuen C++ Standard gehoeren)
loesen das Problem ein fuer alle mal.
> : Was hat denn Dietmars Engagement fuer C++ mit seinem Verhalten gegenueber
> : bestimmten Personen zu tun?
>
> Mein Artikel war in keiner Weise persoenlich gemeint (ich kenne den
> Autor meines Wissens nach nicht; da ich in Berlin studiert habe koennte
> es sein, dass ich ihn doch, aber nicht namentlich, kenne). Ich habe
> lediglich den Stil seines Beispiels kritisiert. Wenn es als Kritik an
> der Person aufgefasst wurde, so tut es mir leid, denn das war nicht
> mein Ziel.
Ich habe das auch nicht als Kritik an Dir gemeint, sondern als Kritik an
Harald Fuchs. Trotzdem sind Hinweise zum Programmierstil praktisch *immer*
eine persoenliche Sache, ganz einfach deshalb, weil Programmierstil eine
persoenliche Sache ist. D.h. bei solchen Hinweisen gehst Du immer das Risiko
ein, dass es jemand persoenlich nimmt. Und, wie ich oben ausgefuehrt habe
halten Deine Sachargumente lange nicht das, was sie versprechen.
> : Warum ist es nicht mehr erlaubt, jemanden zu
> : kritisieren, weil dieser sich (wegen mir auch unentgeltlich) eine bestimmte
> : Arbeit aufgehalst hat?
>
> Man darf mich selbstverstaendlich kritisieren. Ich habe damit kein
Nimms nicht zu hart, auch das war nicht als Kritik an Dir gedacht :-)
> C++ wie C zu benutzen bringt keinen Vorteil.
Auch hier: Widerspruch! Schon alleine die strengere Typpruefung, typesafe
Linkage usw. machen viele Vorteile von C++ gegenueber C aus, auch dann, wenn
ich keine einzige Klasse verwende, sondern weiterhin prozedural
programmiere. Natuerlich kann ich nur einen Bruchteil der Vorteile von C++
nutzen, aber die Aussage, so wie Du sie hinstellst ist auf jeden Fall
falsch.
> Dieser Artikel ist ebenfalls nicht persoenlich. Ich wollte nur
> darlegen, warum ich den Programmierstil von Watson kritisiert habe und
> dass ich auch weiterhin den Programmierstil von Beispielen kritisieren
> werde: Wer bereits in Beispielen Code schreibt, der mir merkwuerdig
> erscheint, der tut das mit hoher Wahrscheinlichkeit auch in seinen
> richtigen Programmen. Darueberhinus wird diese Newsgroup womoeglich von
> Leuten gelesen, die C++ lernen moechten. Daher halte ich es gradezu
> fuer nicht zulaessig, meiner Meinung nach schlecten Stil unkommentiert
> zu lassen.
Soweit ok, nur musst Du dann auch damit rechnen, dass Kritik an Dir bzw.
Deinen Argumenten kommt. Bisher, muss ich ehrlich sagen, waren letztere fuer
mich nicht sehr ueberzeugend - aber vielleicht kommt ja noch mehr :-)
> Im uebrigen interessiert mich eigentlich viel mehr, welche Gruende es
> fuer eine Deklaration wie 'char *string' geben koennte. Vielleicht kann
> mich irgendjemand darueber aufklaeren. Allerdings sollte damit
> gerechnet werden, dass ich womoeglich eine Follow-Up poste, in dem ich
> die angefuehrten Argumente versuche zu entkraeften...
Gruende habe ich oben genug aufgefuehrt, ich warte jetzt mal auf Deinen
Followup :-)
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Technical Details
Message-ID:
<W7Q9BM6M@wuschel.ibb.schwaben.com>Path:
arc1-ca.pugleaf.net!wuschel.ibb.schwaben.com!not-for-mailReferences:
<3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com> <4gdb6p$i5j@news.BelWue.DE>Show Full Headers
Complete Article Headers
Newsgroups: de.comp.lang.c++ Path: arc1-ca.pugleaf.net!wuschel.ibb.schwaben.com!not-for-mail From: uz@wuschel.ibb.schwaben.com (Ullrich von Bassewitz) Subject: Re: Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen Date: 21 Feb 1996 22:43:49 GMT References: <3120B25C.2650@fokus.gmd.de> <31229576.0@news.uni-konstanz.de> <pu91i3yvzc.fsf@themroc.colibri.de> <BOP9B96C@wuschel.ibb.schwaben.com> <4gdb6p$i5j@news.BelWue.DE> Message-ID: <W7Q9BM6M@wuschel.ibb.schwaben.com> Reply-To: uz@ibb.schwaben.com Organization: Ingenieurbuero von Bassewitz X-Newsreader: TIN [version 1.2 PL2]