Was ist er Unterschied zwischen (float)val und float(val)?
-
ui, ui, ui, scheint als hätte ich ein heißes Thema angeschnitten, also von mir noch als Anfänger eine Frage zum saueberen Code Aufbau:
Wenn ich eine long Variable als String an eine Funktion übergeben muss, wie schreibe ich das am besten? definiere ich zunächst einen neuen String alla:
std::string str = ""; str += long; func(str);Oder haue ich das platzsparend direkt in den Funktionsaufruf?
func(string(long)); // Ich weiß kein C++ Cast, aber ich weiß NOCH nicht wies geht :-) schaue es mir aber gleich im Anschluss an diesen Post an...Gruß
Scarabol
-
asc schrieb:
wenn ich Code selber erklären muss, ist dies eher ein Zeichen dafür das ich den Code umschreiben sollte.
Oder dass du nur triviale Themen bearbeitest.
-
Scarabol schrieb:
Oder haue ich das platzsparend direkt in den Funktionsaufruf?
Du schreibst nicht in COBOL, du hast Platz, verwende ihn, um deinen Code lesbarer zu machen.
Und für Zahl <-> String:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.htmlGrüssli
-
Scarabol schrieb:
ui, ui, ui, scheint als hätte ich ein heißes Thema angeschnitten
Nein so heiß is das Thema nicht, das ist normal. Bei den Leuten gehen die Meinungen was C Sachen in C++ Code angeht etwas auseinander.
-
Tachyon schrieb:
_matze schrieb:
...kein Problem, solange man weiß was man tut.

Tust da aber anscheinend oft nicht, wenn man sich Deinen Code und Deine Beispiele so anguckt.

Ach ja? Kann es zufällig sein, dass du damit eben jene Fälle meinst, in denen ich auch gerne mal C-Casts, C-Funktionen etc. verwende? Denn das sind die einzigen, bei denen ich mich an Kritik von dir erinnere. Wir haben hier sowieso viel C-Kram, da schwappt das eben auch in den C++-Source rüber.
Und in vielen Fällen gibt es daran auch nichts auszusetzen. Ich bin halt keiner dieser C++-Puristen. Das wird in unserer Firma nicht so gehandhabt, und ich halte es auch nicht für nötig. Gerade bei den Casts.Und ich nutze z.B. auch ausgiebigst sprintf, da die Handhabung einfach so praktisch und die Notation so schön kompakt ist. Sorry, falls ich dich gerade geschockt habe.
Solange man keine (nicht nullterminierten) Strings im Formatstring einfügt, gibt es daran vermutlich auch nichts auszusetzen......außer natürlich, dass es die Funktion schon in C gab. Das ist natürlich ein Todesurteil, die Verwendung plötzlich unverzeihlich...
asc schrieb:
Ganz ehrlich: Wenn der Code selbsterklärend ist, braucht man auch keine Kommentare. Kommentare verwende ich beispielsweise im Header um die Schnittstelle zu beschreiben, wenn ich Code selber erklären muss, ist dies eher ein Zeichen dafür das ich den Code umschreiben sollte.
Sorry, aber wenn du wirklich (fast) nur in Headern kommentierst, dann machst du in meinen Augen was falsch.
Vielleicht hängt es auch von der Thematik des Codes ab, ich weiß ja nicht was du machst. Aber bei vielen Dingen finde ich Kommentare sinnvoll und hilfreich, für andere wie auch für mich. Denk doch an komplexe Algorithmen, oder Kommunikation mit irgendwelcher Hardware, oder wasweißich. Sowas sollte man nicht unkommentiert da stehen lassen. Vielleicht liest das ja mal einer, der einfach nicht alle aufgerufenen Funktionen kennt. Der kann sich natürlich Stück für Stück mühsam durch die Hilfe ackern, um einen groben Überblick zu bekommen... oder er liest die Kommentare, die ein lieber Programmierer für ihn verewigt hat. 
Nee, Kommentare finde ich schon wichtig (und das hat sicher nix mit meinem unleserlichen C-Code zu tun
). Mann sollte es nicht übertreiben, aber das grobe Verständnis des Ablaufs kann man anderen und sich später erleichtern.EDIT: Kleiner Nachschlag zu den Kommentaren. Ich muss gerade an den heutigen Arbeitstag denken. Ich habe den ganzen Tag versucht (und es jetzt auch größtenteils geschafft), bestehenden Code eines ehemaligen Mitarbeiters in meinen zu packen. Da gehts um komplexe Bildkorrekturen, alles sehr kryptisch, ellenlang, wirklich verdammt lang, und eben nicht auf Anhieb verständlich. Und der Sack hat nicht eine Zeile Kommentar hinterlassen!
Wären die Abläufe zumindest teilweise kommentiert gewesen, hätte mir das sicher in paar Stunden erspart...
-
_matze schrieb:
Ganz ehrlich: Wenn der Code selbsterklärend ist, braucht man auch keine Kommentare. Kommentare verwende ich beispielsweise im Header um die Schnittstelle zu beschreiben, wenn ich Code selber erklären muss, ist dies eher ein Zeichen dafür das ich den Code umschreiben sollte.
Sorry, aber wenn du wirklich (fast) nur in Headern kommentierst, dann machst du in meinen Augen was falsch.
Vielleicht hängt es auch von der Thematik des Codes ab, ich weiß ja nicht was du machst.[/quote]Ich dokumentiere viel, doch ich dupliziere keine Kommentare. Und zum Nachschlagen was eine Klasse macht ist die Schnittstelle der Richtige weg - daher steht die Dokumentation auch genau dort (Zudem durch Doxygen natürlich auch auf den Server als HTML bereit).
Meine Thematik ist in der Tat eher trivial als komplex (ich würde sagen 80% des Codes ist einfache Anwendungslogik), das heißt aber nicht das es nicht auch Bereiche höherer Komplexität im Programm gibt. Doch ich kommentiere dann lieber durch das Aufgliedern des Codes in kleine sinnvoll benannte Teilfunktionalitäten, als durch Kommentare in der Implementierung (die ich zwar von Zeit zu Zeit auch mache, aber tendenziell sehr selten).
_matze schrieb:
Aber bei vielen Dingen finde ich Kommentare sinnvoll und hilfreich, für andere wie auch für mich.
Oh, da gebe ich dir völlig recht, doch wie gesagt Kommentiere ich lieber an einer Stelle - mag auch sein das meine Kommentarmenge andere enttäuschen würde, nur im Vergleich zu allen anderen Entwicklern die ich bislang in Projekten begegnet bin, Kommentiere ich eher zu viel als zu wenig (In den 4 Jahren die ich an einem 15 jährigen Projekt mitgearbeitet hatte, waren am Schluss ca. 98% der Kommentare von mir erstellt - und ich habe dort meines Erachtens noch zu wenig kommentiert).
Ja, komplexe Algorithmen etc. sind in den bisherigen Projekten eher die Seltenheit gewesen, aber auch dort habe ich lieber Funktionen gesplittet und benannt.
_matze schrieb:
...außer natürlich, dass es die Funktion schon in C gab. Das ist natürlich ein Todesurteil, die Verwendung plötzlich unverzeihlich...
Ich verteufel an sich nicht die C-Funktionen insgesamt (auch wenn ich gerade durch sehr schlechte Vorerfahrungen in einigen Projekten gerade die Ellipsen wie sprintf & Co tatsächlich als Problem ansehe), was ich aber anders sehe ist wie gesagt die Reihenfolge für jemanden der C++ lernt.
Und auch wenn ich nicht über alle C++ Konstrukte froh bin, so halte ich es für sinnvoller jemanden der C++ lernt auch vorwiegend den C++ Ansatz beizubringen. In den Fällen, wo der Ansatz nicht ideal war, kann man dann noch immer nachbessern.
cu André
-
asc schrieb:
Und auch wenn ich nicht über alle C++ Konstrukte froh bin, so halte ich es für sinnvoller jemanden der C++ lernt auch vorwiegend den C++ Ansatz beizubringen.
Zeig ihm einen einfachen, sinnvollen Ansatz. Egal ob C oder C++.
Matze:
Deine Sichtweise ist ok!
-
C++fan 2009 schrieb:
Zeig ihm einen einfachen, sinnvollen Ansatz. Egal ob C oder C++.
Vermutlich der klügste Satz dieses Threads...

-
Jup. Vielleicht sogar der klügste Satz im ganzen Forum heuer.
-
Hey, wo bleibt die Gegenpartei? Ich warte auf ein:
"Jup. Vielleicht sogar der dümmste Satz im ganzen Forum heuer."Naja, jetzt habe ich es schon getan :p
Sagt mal, statt immer wieder so sinnlose Sätze zu formulieren, können wir uns nicht einfach darauf einigen, dass wir uns uneinig sind?
Grüssli
-
Dravere schrieb:
können wir uns nicht einfach darauf einigen, dass wir uns uneinig sind?


Naja das man sich bei solchen themen nie einig wird dürfte ja eh kalr sein, hier prallen einfach zuviele verschiedene Erfahrungen aufeinander als das man solche Themen auf einen Punkt bringen könnte.
-
Dravere schrieb:
Naja,
float(val)ist ein Konstruktor aufruf während(float)valder C Cast ist.Jain

Der Effekt von beiden ist der selbe, und beide werden im Standard als "explicit type conversion" bezeichnet.Die Form
T(val)wird dabei als "functional notation" bezeichnet, und die Form(T) valals "cast notation".Heisst soviel wie: die Form
T(val)*ist* kein Ctor aufruf. Sie *führt* nur zu einem Ctor Aufruf, auf dem gleichen Weg, wie auch(T) valzu einen Ctor Aufruf führt.