41 Stimmen

Definition von String-Konstanten für Klassen in C++?

Ich habe Code mit diesen beiden Stilen gesehen, ich bin mir nicht sicher, ob einer besser ist als der andere (ist es nur eine Frage des Stils)? Haben Sie irgendwelche Empfehlungen, warum Sie eine über eine andere wählen würde.

 //Example1
 class Test {

    private:
        static const char* const str;

};

const char* const Test::str = "mystr";

//Example2
class Test {

     private:
         static const std::string str;

};

const std::string Test::str ="mystr";

1voto

Eclipse Punkte 43775

Die zweite Version hat den Vorteil, dass sie mit einer vorberechneten Länge und den anderen Vorteilen einer ausgefeilten Stringklasse daherkommt. Die erste Version hat den Vorteil, dass die einzige Initialisierung darin besteht, einen Zeiger auf statische Daten zuzuweisen, die bereits in das ausführbare Image geladen wurden, während die zweite Version die Zeichenkette mit demselben Zeiger initialisieren muss.

1voto

James Curran Punkte 98228

Zunächst einmal würde ich kein Zeichen* verwenden. Wenn Sie eine ASCIIZ-Zeichenkette wollen, definieren Sie eine davon direkt:

const char Test::str[] = "mystr";

In den meisten Fällen würde ich das verwenden. Warum Zeit und Speicher für den Overhead der String-Klasse verschwenden.

Beachten Sie, dass "sizeof(Test::str)" genau die Länge des Arrays angibt, die der Länge der Zeichenkette einschließlich des abschließenden NUL (strlen(str)+1) entspricht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X