C++ konform bleiben und memset-analogon?
-
Hallo,
gibt es ein memset-analogon in C++? UNd sollte man wenn man in C++ schreibt schauen dass man möglichst keine C-sachen verwendet sondern sich auf die C++Konstrukte stützt? Und wenn ja -warum?
-
In C++ kommt man von den POD-
structs(Plain Old Data) von C weg und wendet sich eher komplexerenclass-Klassen zu. Diese sind meist mehr als nur eine Sammlung von Attributen, sie haben interne Stati und arbeiten möglicherweise sogar mit Vererbung oder Polymorphie. Da funktionieren byteweise Mechanismen oft nicht mehr oder führen zu undefiniertem Verhalten.So was wie
memset()brauchst du also gar nicht in C++. Mit den Konstruktoren stellt man normalerweise eine korrekte Initialisierung sicher.
-
WeißBier schrieb:
Hallo,
gibt es ein memset-analogon in C++?ja, memset.
aber auch std::fillWeißBier schrieb:
UNd sollte man wenn man in C++ schreibt schauen dass man möglichst keine C-sachen verwendet sondern sich auf die C++Konstrukte stützt?
nein, das wäre schrecklich dumm. ist aber der häufigste fehler, den du in diesem forum finden wirst. deshalb wirds auch gleich einige nubes geben, die mir aufs heftigste widersprechen.
-
Grundsätzlich gibt es nichts im Sinne von
memset, da man in C++ sowas gar nicht braucht. In C++ hat man Initialisierunglisten, bzw. Konstruktoren, und ähnliches. Allerdings für Listen gibt es einen entsprechenden Algorithmus:
http://www.cplusplus.com/reference/algorithm/fill/
bzw.
http://www.cplusplus.com/reference/algorithm/fill_n/Und ob man zwischen C und C++ trennen soll? Ja!
Wieso? Weil es unterschiedliche Sprachen sind mit unterschiedlichen Ideen und Konzepten. Vor allem hat man in C keine Typsicherheit, was in C++ sehr entscheidend ist. Auch das fehlen von Exceptions in C kann durchaus mühsam sein.
Das soll jetzt nicht heissen, dass man immer auf C verzichten soll, es gibt wie immer Ausnahmen, aber es sollte im Allgemeinen bei einer Ausnahme bleiben.Grüssli
-
Und wenn ja -warum?
Weil es C++ ist.
gibt es ein memset-analogon in C++?
Kommt drauf an, wofuer du es verwenden willst. Ansonsten: memset.
Frage in der Mitte: ... Antwort: Ja.
-
Also ich möchte keinen Streit anzetteln aber mich interessieren immer beide seiten der Medaille.
nein, das wäre schrecklich dumm. ist aber der häufigste fehler, den du in diesem forum finden wirst. deshalb wirds auch gleich einige nubes geben, die mir aufs heftigste widersprechen.
ich möchte nicht zu nahe treten...ist das eine meinung die aus erfahrung spricht (Beispiel)?
-
volkard schrieb:
WeißBier schrieb:
UNd sollte man wenn man in C++ schreibt schauen dass man möglichst keine C-sachen verwendet sondern sich auf die C++Konstrukte stützt?
nein, das wäre schrecklich dumm. ist aber der häufigste fehler, den du in diesem forum finden wirst. deshalb wirds auch gleich einige nubes geben, die mir aufs heftigste widersprechen.
Ist es nicht eher schrecklich dumm sowas einem Neuling zu sagen? Ich denke, es ist sehr wichtig, dass jemand am Anfang C++ richtig kennen lernt und daher so viel wie möglich probiert in C++ zu lösen, denn sehr vieles geht auch in C++, wenn man in C++ programmiert. C sollte nur als mögliche Ergänzung angesehen werden und nur dort verwendet werden, wo es wirklich Sinn macht. Ein Anfänger kann das aber meistens nicht feststellen, da er C++ noch gar nicht kennt.
Oder siehst du das anders?
Grüssli
PS: Als Moderator sollte man doch eigentlich höflicher sein, nicht?
-
WeißBier schrieb:
ich möchte nicht zu nahe treten...ist das eine meinung die aus erfahrung spricht (Beispiel)?
Es gibt eben unterschiedliche Meinungen in diesem Forum. Aber viele vertreten die Ansicht, dass man in den meisten Fällen mit "reinem" C++ relativ weit kommt (darunter ich).
Trotzdem bedeutet das nicht, C-Code hätte grundsätzlich nichts in C++ zu suchen. Bei gewissen Anwendungsfällen (oft Low-Level) hat C durchaus seine Berechtigung. Allerdings würde ich mich hüten, massiv C in C++ einzusetzen, besonders als Anfänger. Denn viele Dinge wurden in C++ besser gelöst - siehe Draveres erster Post.
-
volkard schrieb:
WeißBier schrieb:
UNd sollte man wenn man in C++ schreibt schauen dass man möglichst keine C-sachen verwendet sondern sich auf die C++Konstrukte stützt?
nein, das wäre schrecklich dumm. ist aber der häufigste fehler, den du in diesem forum finden wirst. deshalb wirds auch gleich einige nubes geben, die mir aufs heftigste widersprechen.
Weder die dogmatische absolute Abkehr von allem was C ähnlich sieht ist richtig, noch das sorglose Benutzen jeglicher C-Konstrukte die einem in den Sinn kommen.
Auf niedrigem Abstraktionsniveau ist es durchaus in Ordnung und manchmal auch erforderlich, aus C bekannte Sprachmittel wie z.B. blanke Pointer, C-Arrays, PODs, bit-Tricksereien usw. zu benutzen. Andererseits gibt es auch einige Elemente in C, meist auf höheren Abstraktionsebenen, die in C++ andere, meist sicherere und kaum weniger performante Lösungen haben und deshalb nicht verwendet werden sollten. Dazu gehören z.B. die C++-Streams und variable Argumentlisten (Ellipsen).
Es ist einfach nur wichtig zu wissen, was man tut, warum man es tut, warum man es mit C-Mitteln macht und welche Gefahren dabei auftreten, denn grob verallgemeinert hat der Compiler bei C weniger Diagnosemöglichkeiten als bei C++ und kann den Entwickler daher auch nicht so gut bei der Fehlervermeidung unterstützen.
-
WeißBier schrieb:
ist das eine meinung die aus erfahrung spricht (Beispiel)?
neulich http://www.c-plusplus.net/forum/viewtopic-var-p-is-1696844.html#1696844
-
Dravere schrieb:
PS: Als Moderator sollte man doch eigentlich höflicher sein, nicht?
stimmt, hab ich doch glatt vergessen.
ich nehme alles zurück und schließe mich pumuckl an.
-
volkard schrieb:
Dravere schrieb:
PS: Als Moderator sollte man doch eigentlich höflicher sein, nicht?
stimmt, hab ich doch glatt vergessen.
Irgendwie glaub ich dir das nicht ...

volkard schrieb:
ich nehme alles zurück und schließe mich pumuckl an.
Ja, pumuckl hat es sehr gut zusammengefasst. Ich hätte allerdings noch ein paar zusätzliche Warnungen eingebaut. Vor allem, dass ein Neuling nicht zu schnell denken soll, dass er wüsste, was er tut

Grüssli
-
Es ist einfach nur wichtig zu wissen, was man tut, warum man es tut, warum man es mit C-Mitteln macht
genau damit hab ich ein problem, ich weiß eben als neuling nie ob es jetzt besser ist dies so oder so zu machen. Soll das jetzt heißen - codest du in C++ machs in C++ es sei denn du weißt was du tust wenn du es in C machen willst?
-
WeißBier schrieb:
Es ist einfach nur wichtig zu wissen, was man tut, warum man es tut, warum man es mit C-Mitteln macht
genau damit hab ich ein problem, ich weiß eben als neuling nie ob es jetzt besser ist dies so oder so zu machen. Soll das jetzt heißen - codest du in C++ machs in C++ es sei denn du weißt was du tust wenn du es in C machen willst?
Schau dir verschiedene Möglichkeiten an und Probiere etwas damit rum, schau dir vor allem die Nachteile an.
Ich geb dir ein Beispiel.
Ich bin selbst ein Nutezr von C Sprachelementen ich nutze für meien Dateioperationen fast nur C Sprachmittel, also FILE. Das ist das gegenstück zu fstreams, es hat den Vorteil das ich die Bedienung sehr viel komfotabler und einfacherer Finde, hat aber auch den Nachteil das es nicht so sicher ist wie fstreams. Über solche Sachen soltle man sich dann aber im klaren sein das man eben etwas mehr aufpassen muß.
Im übrigen bin ich volkhards Meinung was ide verwendung angeht. Bei obengenannten Beispiel bastel ich gerade an eienr C++ reinen lösung und die ist schon komplizierter als die C Variante.
-
WeißBier schrieb:
Soll das jetzt heißen - codest du in C++ machs in C++ es sei denn du weißt was du tust wenn du es in C machen willst?
So könnte man es formulieren. Wenn du wirklich C++ programmieren willst, dann schau dir zuerst an, ob du ein entsprechendes Mittel in C++ findest. Erst wenn du die Mittel kennst und merkst, in C würde eine bestimmte Sache besser gehen, solltest du dich danach umschauen.
Und der Grund dafür ist nicht - wie gewisse Leute hier den Eindruck machen - weil es in Foren nicht angesehen ist, C mit C++ zu mischen. Es gibt wirklich sehr vieles, das in C++ eleganter geht. Nur schon durch Templates, objektorientierte Programmierung und die dadurch entstehende Abstraktion vom Low-Level-C-Gefrickel hat man viel mehr Möglichkeiten. Von den darauf aufbauenden Konzepten ganz zu schweigen.
Xebov schrieb:
Im übrigen bin ich volkhards Meinung was ide verwendung angeht. Bei obengenannten Beispiel bastel ich gerade an eienr C++ reinen lösung und die ist schon komplizierter als die C Variante.
Dass sie für dich komplizierter ist, hängt wahrscheinlich auch damit zusammen, dass du dich bisher mehr mit den C-Varianten auskennst und vielleicht noch nicht genau weisst, wie so etwas in C++ sauber gelöst wird. Auch wenn du mit
FILE*beginnst, werden dir die Streams am Anfang schwer fallen. Das ist immer so.Von daher empfehle ich, sich für eine Sprache zu entscheiden. Falls diese C++ ist, sollte man versuchen, besonders als Anfänger sauberes C++ zu programmieren, damit man sich nicht bereits von Anfang an einen schlechten Stil angewöhnt und sich nachher umgewöhnen muss. Man hat später noch genügend Gelegenheit, sich auch mit den Eigenschaften von C auseinanderzusetzen. Denn die Fälle, in denen man in C++ auf C zurückgreift, sind für Anfänger meistens irrelevant. Oft geht es darum, für gewisse Optimierungen oder aus Kompatibilitätsgründen Low-Level-Konstrukte anzuwenden. Darum braucht sich ein Einsteiger noch nicht zu kümmern.
-
@Nexus:
Zusammengefasst kann man wohl sagen: man kann zwei Möglichkeiten erst vergleichen, wenn man beide ausreichend gut kennt
-
Nexus schrieb:
Dass sie für dich komplizierter ist, hängt wahrscheinlich auch damit zusammen, dass du dich bisher mehr mit den C-Varianten auskennst und vielleicht noch nicht genau weisst, wie so etwas in C++ sauber gelöst wird. Auch wenn du mit
FILE*beginnst, werden dir die Streams am Anfang schwer fallen. Das ist immer so.Ja das ist gut möglich, sie sind vor allem Restriktiver was die übergabe von Zeiegrn angeht (char* statt void*) und wenn ich in|out machen will und die Datei nicht existiert wird mir nicht automatisch eine erstellt, alles recht sicher aber wenn man weis was man will nicht gerade angenehm.
-
hustbaer schrieb:
@Nexus:
Zusammengefasst kann man wohl sagen: man kann zwei Möglichkeiten erst vergleichen, wenn man beide ausreichend gut kennt
Und man kann erst beides ausreichend kennen, wenn man beides gleichwertig gelernt hat. Von daher bin ich der Meinung das man immer zuerst mit einer Sprache (in diesem Fall ENTWEDER C oder C++) beginnen sollte, und sich anschließend bei Bedarf auch mit der anderen Auseinander setzt.
-
hustbaer und asc, ihr habt es wieder mal gut auf den Punkt gebracht.

-
ich verstehe eure Argumentation....allerdings würde ich mich persönlich immer fragen....ich bin doch noch Anfänger....ich darf noch nicht C in C++ unetrsuchen - und asc und Nexus haben gesagt es geht immer mit C++.
Und leider gesagt fehlt mir die Zeit mich erst intensiv damit zu beschäftigen ob es denn nun in C++ besser/schneller/schöner/oder sonstwie geht als mit C.
Unter Zeitdruck nimmt man doch immer das her von dem man überzeugt bzw. mit dem man bewandert ist....ich weiß ja bis heute nicht wie ich meine Programmierkünste einstufen kann/darf...mit so etwas tut man sich glaube ich sehr sehr schwer.