2016-06-01 3 views
1

Si je voulais renommer le type std::string à une plus simple et plus regardant naturellement string, lequel de ces deux méthodes devrais-je utiliser (en fonction du rendement et ce qui est généralement la norme)Quelle est la meilleure méthode de "changement de nom"?

Dois-je renommer comme une directive prétraité

#define string std::string 

Ou faire avec une définition de type

typedef std::string string; 

Quelle est la méthode la plus performante? Qu'est-ce qui est aussi plus familier et reconnu à la communauté?

+2

Si vous voulez renommer 'std :: string' en 'chaîne', écrivez' en utilisant std :: string' au début de votre code. – ForceBru

+0

Peu importe comment vous le faites - la performance ne sera pas affectée. À moins que vous ne parliez de la performance de compilation;) – BitTickler

+0

Merci à tous pour la réponse rapide, je suis encore assez noob à ce sujet. – user6245072

Répondre

11

Juste

using std::string; 

Si vous voulez un nom légèrement différent, par exemple

using String = std::string; 

Évitez les macros, ils ne respectent pas les étendues et sont généralement mal ™.

Par exemple, le projet de macro

#define string std::string 

& hellip; renvoie un comportement non défini formel si vous incluez un en-tête de bibliothèque standard, car il définit un nom utilisé par la bibliothèque standard.

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

une unité de traduction qui comprend un en-tête de la bibliothèque standard ne doit pas #define ou #undef noms déclaré dans toute norme en-tête de bibliothèque.

+0

Comme le fait de décourager l'utilisation des macros. –

+0

Merci! J'ai ajouté un peu plus d'infos. ;-) –

+0

Que '§17.6.4.2.2/1' est une bonne raison de ne pas définir de caractère minuscule (avec/sans traits de soulignement) +1 –

4

Vous devez utiliser using si vous ne voulez pas namespace écrire

using std::string; 

ne le sera plus performant puisque tous sont la compilation.

Pour les cas plus complexes, vous pouvez utiliser d'autres sous forme de using

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

Une écriture

using std::string; 

est la meilleure façon. Cela a pour effet d'amener la classe de chaînes de bibliothèque C++ standard dans l'espace de noms actuel. Mais, en réalité, vous devriez apprendre à lire couramment du code qui contient des opérateurs de résolution d'oscilloscopes. En écrivant

std::string 

les gens lisant votre code savent exactement ce qui se passe.

+0

Je sais que la pratique d'écrire des qualifications d'espace de noms, en particulier 'std ::', a été adoptée dans certaines directives de codage. Et de nombreux programmeurs de ces entreprises/projets ont affirmé qu'ils trouvent * plus facile * de lire le code avec les qualifications, après une période d'accoutumance. Cependant, comme il s'agit plus d'écrire et de lire et d'analyser (ce qui prend du temps), et comme un IDE moderne vous dira la définition de n'importe quoi, je suppose que beaucoup de temps précieux des programmeurs sont perdus à cause de cette pratique. –

+1

@ Cheersandhth.-Alf, puisque près de 80% du temps des développeurs est consacré à la maintenance du code, OMI, le temps supplémentaire consacré à l'utilisation explicite des pals 'std ::' par rapport au coût global d'un projet. –

+1

@RSahu: Eh bien le 80% est mon argument (non mentionné), sauf que je tire la conclusion inverse: Je pense que le temps passé à rendre le code lisible et clair, se rembourse encore et encore pendant la maintenance. –