2016-06-01 20 views
1

Wenn ich den std::string Typ ein einfacheres und natürlich suchen string, welche dieser beiden Methoden sollte ich (basierend auf Leistung und was ist in der Regel die Standard)Was ist die beste Umbenennungsmethode?

Soll ich benennen Sie es als vorverarbeitet Richtlinie umbenennen wollte

#define string std::string 

Oder tun sie es mit einer Typdefinition

typedef std::string string; 

Was ist die performante Methode? Was ist auch der Gemeinschaft vertrauter und anerkannter?

+2

Wenn Sie 'std :: string' in' string' umbenennen wollen, schreiben Sie 'using std :: string' am Anfang Ihres Codes. – ForceBru

+0

Egal wie Sie es tun - die Leistung wird nicht beeinträchtigt. Es sei denn, du sprichst von Kompilierzeit Leistung;) – BitTickler

+0

Vielen Dank für die schnelle Antwort, ich bin immer noch ziemlich noob an diesem. – user6245072

Antwort

11

Gerade

using std::string; 

Wenn Sie einen etwas anderen Namen wünschen, zum Beispiel

using String = std::string; 

Vermeiden Sie Makros, sie nicht respektieren Bereiche und sind in der Regel Böse ™.

Zum Beispiel das Makro vorgeschlagen

#define string std::string 

& hellip; führt zu formalem undefiniertem Verhalten, wenn Sie einen Standardbibliotheksheader einschließen, da dieser einen von der Standardbibliothek verwendeten Namen definiert.

C++ 11 §17.6.4.2.2/1 [macro.names]:

eine Übersetzungseinheit, die eine Standardbibliothek Header enthält darf nicht #define oder #undef Namen in jedem Standard erklärt Bibliothekskopfzeile.

+0

Wie das bisschen über die entmutigende Verwendung von Makros. –

+0

Danke! Ich habe ein wenig mehr Info hinzugefügt. ;-) –

+0

Das '§17.6.4.2.2/1' ist ein guter Grund, keine Kleinbuchstaben (mit/ohne Unterstriche) zu definieren +1 –

4

Sie sollten using verwenden, wenn Sie nicht nur Namensraum

using std::string; 

schreiben wollen Weder wird mehr performant, da alle von ihnen Kompilierung sind.

Für komplexere Fälle können Sie eine andere Form von using verwenden

using short_name = complex_name<possibly, with, templates>; 
4

Schreiben

using std::string; 

der beste Weg ist. Dies hat zur Folge, dass die Standard-C++ - Bibliotheks-String-Klasse in den aktuellen Namespace gebracht wird.

Aber wirklich sollten Sie lernen, Code, der Scope-Auflösung Operatoren fließend zu lesen. In schriftlicher Form

std::string 

Leute, die Ihren Code lesen, wissen genau, was vor sich geht.

+0

Ich weiß, dass die Praxis, Namespace-Qualifikationen zu schreiben, insbesondere "std ::", in einige Kodierungsrichtlinien übernommen wurde. Und viele Programmierer solcher Firmen/Projekte haben behauptet, dass es ihnen nach einer gewissen Eingewöhnungszeit * leichter fällt *, den Code mit den Qualifikationen zu lesen. Da es jedoch mehr zu schreiben und mehr zu lesen und zu parsen ist (beides benötigt Zeit), und da eine moderne IDE Ihnen die Definition von irgendetwas sagen wird, vermute ich, dass aufgrund dieser Praxis viel wertvolle Programmierzeit verloren geht. –

+1

@ Cheersandthth.-Alf, da fast 80% der Entwickler Zeit für Code-Pflege, IMO die zusätzliche Zeit für die explizite Verwendung von 'std ::' Pales im Vergleich zu den Gesamtkosten eines Projekts ausgegeben. –

+1

@RSahu: Nun, die 80% sind mein (unerwähntes) Argument, außer dass ich das gegenteilige Fazit ziehe: Ich denke die Zeit, die damit verbracht wurde, den Code lesbar und klar zu machen, zahlt sich während der Wartung immer wieder aus. –

Verwandte Themen