2016-06-01 4 views
1

よりシンプルかつ自然にstring、私が使用する必要がありますこれらの2つの方法の(パフォーマンスに基づいて、どのような基準が通常である)"名前を変更する"の方法は何ですか?私は<code>std::string</code>タイプの名前を変更したい場合は

は、私が前処理ディレクティブとしてその名前を変更すべきを探して

#define string std::string 

またはタイプ定義でそれを行う

typedef std::string string; 

最もパフォーマンスの高い方法は何ですか?コミュニティにとってより身近なものと認識されているものは何ですか?

+2

'' std :: string'の名前を 'string'に変更したいのであれば、コードの先頭に' 'std :: string'を書いてください。 – ForceBru

+0

どのように行っても、パフォーマンスには影響しません。コンパイル時のパフォーマンスについて話さない限り) – BitTickler

+0

すみません、皆さん、ありがとうございました。 – user6245072

答えて

11

だけ

using std::string; 

あなたがわずかに異なる名前を使用する場合は、例えば

using String = std::string; 

マクロを避け、彼らはスコープを尊重し、™一般悪ですしないでください。

例えば、提案されたマクロ

#define string std::string 

&hellip。標準ライブラリによって使用される名前が定義されているため、標準ライブラリヘッダをインクルードすると正式なUndefined Behaviorが生成されます。

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

任意の標準の中で宣言#define又は#undef名てはならない標準ライブラリヘッダを含む変換ユニットライブラリヘッダ。

+0

マクロの使用を抑止することについてのビットと似ています。 –

+0

ありがとう!もう少し詳しい情報を追加しました。 ;-) –

+0

'§17.6.4.2.2/ 1'は、lowercase_only(アンダースコア付き/なし)を定義しないのがよい理由です。+1 –

4

あなただけの名前空間

using std::string; 

どちらもそれらのすべてがコンパイル時であるため、よりパフォーマンスになりますを書くことではないしたい場合は、usingを使用する必要があります。あなたは

using std::string; 

を書くusing

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

の他のフォームを使用することができ、より複雑な例については

が最善の方法です。これは、標準のC++ライブラリ文字列クラスを現在の名前空間に持っていくという効果があります。

実際には、スコープ解決演算子を含むコードを流暢に読むことを学ぶべきです。文章で

std::string 

あなたのコードは、何が起こっているかを正確に知っている。

+0

私は、名前空間の修飾、特に 'std ::'を書く習慣がいくつかのコーディングガイドラインに採用されていることを知っています。そのような企業/プロジェクトのプログラマーの多くは、期間を経て資格を取得してコードを読むのが簡単であると主張しています。しかし、それは書くことが多く、読み込みと解析が多く(どちらも時間がかかります)、現代のIDEが何かの定義を教えてくれるので、このプラクティスのために非常に貴重なプログラマーの時間が失われてしまいます。 –

+1

@ Cheersandhth.-Alf、開発者の時間の80%近くがコードのメンテナンスに費やされているため、IMOはプロジェクトの全体的なコストと比較して明示的に 'std ::'を使用する余分な時間を費やします。 –

+1

@RSahu:正反対の結論を導き出す以外は、80%が私の(言及されていない)議論です。コードを読みやすく、明確にするために費やした時間は、メンテナンス中に何度も繰り返し支払うと思います。 –

関連する問題