Ansicht umschalten
Avatar von Artchi
  • Artchi

mehr als 1000 Beiträge seit 04.04.2000

Re: Mal Aufklärung

Succinite schrieb am 30. März 2011 16:31

> Die Gefahr besteht darin, daß C++ 
> dem Programmierer sehr viel lästige
> Pflichten abnimmt, in denen viele
> Standardaufgabenstellungen schon durch
> die entsprechenden Klassen/Bibliotheken
> gelöst werden.

> Auf dem PC mag das nicht weh tun, wenn 
> eine Aufgabe um den Faktor 100 langsamer
> gelöst wird als beim hangeschmiedeten 
> Assembler; der Programmierer merkt es
> nicht einmal, und gewöhnt sich schnell
> an die Bequemlichkeit.

> Im embedded Bereich tut es hingegen sehr weh.
> Plain C ist einfach deutlich durchschaubarer.


Da muss man nichts mit Hand schreiben! Das geht auch mit der C++
Standard-Lib und ich muß mich nicht mit C oder ASM abkräpeln. Man muß
sich einfach nur mit C++ beschäftigen, wie mit jeder anderen Sprache
und Library auch.

Deine beschriebene Ausgangssituation:

str = str + c;

Stimmt, wenn man weiß was da gemacht wird, ist das selbst auf einem
PC nicht wirklich sinnvoll. Was passiert da? Es wird ein zu dem
String ein Character hinzugefügt, und in den linken String _kopiert_.
Da war der Flaschenhals!
Aber das weiß man ohne Glaskugel, sowas kann man in jeder C++
Library-Reference nachlesen. Weil das im ISO C++ so definiert ist.

Wenn man eine Kopie haben will, macht es Sinn. Ist aber wohl meistens
nicht die Intention. Was tun? Man schaut in die C++ Reference, und
findet append:

str.append(c);

Es wird einfach nur ein Char zum String hinzugefügt. Nicht mehr und
nicht weniger. Wem das zu viel Schreibarbeit ist, kann das auch mit
dem += Operator machen:

str += c;

Das hat nichts mit Zauberei oder Guru-Wissen zu tun, das steht in
jeder C++ String Reference drin und natürlich im ISO C++.

In C++ gilt: du zahlst nur für das, was du nutzt. Wenn ich aber per
Code eine Kopie _anweise_, dann macht das natürlich auch der Code.
Logisch.

Ich kann auch das ganze noch optimieren:

string str;
str.reserve(1000); // tausend Zeichen vor-reservieren
str += c; // Ein Zeichen im String, aber noch vorreservierter Platz
für 999 Zeichen.

Man muß sich aber natürlich auch mal mit der Klasse String aus dem
C++ Standard beschäftigen. Und das hat euer neu eingestellter
Programmierer anscheinend nicht gemacht. 

Übrigens, macht der + Operator z.B. hier Sinn:

string kompletterName = vorname + nachname;

Nur um nochmal deutlich zu machen, wann ich den + und wann ich den +=
Operator einsetze.

Bewerten
- +
Ansicht umschalten