[Code Snippet] Save / Load Lists

03/31/2012 00:03 MrSm!th#16
Quote:
Jau, klar. Das sind ja auch nur Richlinien.
Richtlinien implizieren aber eine Art Standard. Es gibt zwar ein paar sehr verbreitete Konventionen, aber keine als einzig richtige anerkannte.

Quote:
listX wird in der Funktion LoadList nicht genutzt -> der Parameter ist unnötig.
Achso, hab ich gar nicht gemerkt.

Quote:
Höre ich zum ersten mal und es würde mich wundern, wenn das der Fall wäre.
Doch das bringt mich auf einen anderen Gedanken - der move ctor. Sollte std::list einen solchen haben, dann ist return by value schneller!
Das schaue ich mir später mal an, wenn ich daran denke.
Zumindest die String Klasse ist so aufgebaut, wenn ich mich recht erinner. std::vector nicht, aber wie es mit list und ähnlichen zeigerbasierten Containern aussieht, weiß ich nicht.

Move ctor? oO

Quote:
So spontan kenne ich niemanden, der Variablennamen groß schreibt. Dass globale Variablen (welche man vermeiden soll) g und Klassenmember m als Präfix erhalten ist hingegen durchaus gang und gebe.
An das Kleinschreiben von (öffentlichen) Methoden halte ich mich hingegen wieder nicht, das schaut für mich falsch aus. Private Methoden schreibe ich klein und öffentliche groß.
Wie du schon sagtest, Geschmackssache.
Wie gesagt, hat auch ein bisschen was mit der Bedeutung zu tun. Ich kenne auch keinen, der int I schreibt, aber wenn es um wichtige Variablen geht, die eventuell sogar längere Namen haben, sind klein geschriebene Namen nicht sehr leserlich.

Dass man globale Variablen vermeiden sollte, ist mir klar, dennoch ist es nicht immer möglich, zumal sie dann wenigstens als solche gut kenntlich gemacht werden sollten.
Aber da persönlich fände ich etwas wie
Code:
const int g_varyimportantconstant
ziemlich unschön, selbst, wenn man nach dem ersten Teilwort mit CamelCase oder Unterstrichen beginnt.

Die Konvention mit den Methodennamen ist für C und C++ Programmierer ziemlich ungewohnt, sie kommt aus dem Hardcore OOP Bereich wie Java, da fängt jede Methode klein an. Mir fällt gerade sogar ein, dass in der STL eigentlich sogar alle Methoden komplett klein sind.

Und jo, is Geschmackssache, solange man seinen eigenen Stil konsequent einhält.

Übrigens, deine angesprochene Misere ist selbst kein Designfehler, sondern Folge eines anderen Umstandes, den man möglicherweise als Designfehler ansehen könnte. Ist aber Ansichtssache, da mir beide Möglichkeiten logisch erscheinen:

In C++ liest man streng genommen von rechts nach links:

Code:
int x; //x ist ein int
const int x;
//streng genommen wäre es folgende reihenfolge:
int const x; //X ist ein konstanter int
int *x; //x ist ein zeiger auf int
int const *x; //x ist ein zeiger auf einen konstanten int
int const * const x; //x ist ein konstanter zeiger auf einen konstanten int
In einigen anderen Sprachen, die mehr an Sprache angelehnt sind (zb. Delphi) werden ja auch erst die Namen angegeben und dann die Datentypen. Aussprachetechnisch ist es in C++ das Gleiche, nur geschrieben wird es umgekehrt, vielleicht, um sofort die Datentypen zu sehen und dann die Namen der Variablen.
03/31/2012 16:40 Bot_interesierter#17
[Only registered and activated users can see links. Click Here To Register...]
Boost bietet für alle STD Container Möglichkeiten diese zu serialisieren, auch nicht POD Typen/Klassen lassen sich mit dieser Bibliothek serialisieren.
03/31/2012 19:09 Nightblizard#18
Quote:
Originally Posted by MrSm!th View Post
Richtlinien implizieren aber eine Art Standard. Es gibt zwar ein paar sehr verbreitete Konventionen, aber keine als einzig richtige anerkannte.
Versteh mich bitte nicht falsch, aber ich habe nicht wirklich Lust über Konventionen zu diskutieren. :)


Quote:
Zumindest die String Klasse ist so aufgebaut, wenn ich mich recht erinner. std::vector nicht, aber wie es mit list und ähnlichen zeigerbasierten Containern aussieht, weiß ich nicht.
Wie gesagt, höre ich zum ersten mal. Und dass das scheinbar nur bei Strings funktioniert klingt das für mich nach einer compile-time Optimierung, wenn du sowas machst:
Code:
std::string foo = "foo";
auto bar = foo;
Ich werd nacher mal schauen was der Standard dazu sagt.

Quote:
Move ctor? oO
Jup. Am Besten danach googeln, falls du nicht weißt was das ist. Das zu erklären würde den Rahmen ein wenig sprengen. ^^

std::list hat tatsächlich einen (jeder std container hat ihn)! Sprich, return by value wäre tatsächlich die bessere Wahl!
Hehe, mit C++11 muss man richtig umdenken! :p

Quote:
Übrigens, deine angesprochene Misere ist selbst kein Designfehler, sondern Folge eines anderen Umstandes, den man möglicherweise als Designfehler ansehen könnte. Ist aber Ansichtssache, da mir beide Möglichkeiten logisch erscheinen:

In C++ liest man streng genommen von rechts nach links:

Code:
int x; //x ist ein int
const int x;
//streng genommen wäre es folgende reihenfolge:
int const x; //X ist ein konstanter int
int *x; //x ist ein zeiger auf int
int const *x; //x ist ein zeiger auf einen konstanten int
int const * const x; //x ist ein konstanter zeiger auf einen konstanten int
In einigen anderen Sprachen, die mehr an Sprache angelehnt sind (zb. Delphi) werden ja auch erst die Namen angegeben und dann die Datentypen. Aussprachetechnisch ist es in C++ das Gleiche, nur geschrieben wird es umgekehrt, vielleicht, um sofort die Datentypen zu sehen und dann die Namen der Variablen.
So gesehen stimmt das, aber auch das Thema will ich zumindest hier nicht all zu sehr vertiefen.
03/31/2012 19:55 MrSm!th#19
Quote:
Versteh mich bitte nicht falsch, aber ich habe nicht wirklich Lust über Konventionen zu diskutieren.
Das geht auch nicht, weil es Geschmackssache ist. Ich habe das lediglich gesagt, weil ich nicht wollte, dass Leute, die deinen Post lesen, denken, das was du schreibst wäre allgemeingültig und richtig. Denn Konventionen sind Geschmackssache und nur weil du es leserlicher findest, sieht das nicht jeder so. Das wollte ich lediglich klarstellen, weil es bei dir so rüberkam, als müsste der TE deinen Code nun ändern, weil er macht es ja falsch; wollte keine Diskussion darüber anfangen.

Quote:
Wie gesagt, höre ich zum ersten mal. Und dass das scheinbar nur bei Strings funktioniert klingt das für mich nach einer compile-time Optimierung, wenn du sowas machst:
Nein, das meinte ich nicht. Ich wollte damit sagen, dass die Klasse dahingehend designed wurde. Kann auch sein, dass ich mich da irre, aber etwas ähnliches habe ich in seinem Buch gelesen, als er Strings abgehandelt hat.

Quote:
std::list hat tatsächlich einen (jeder std container hat ihn)! Sprich, return by value wäre tatsächlich die bessere Wahl!
Hehe, mit C++11 muss man richtig umdenken!
Das kam mit C++11? Dann kann man sich nicht zwingend drauf verlassen, nicht jeder Compiler unterstützt den schon.