web-dev-qa-db-ja.com

C ++のstd :: string vs string

可能な重複:
「using namespace std;」がC++の悪い習慣と見なされる理由
std名前空間を使用

私はさまざまなフォーラムの周りをホバリングしてきましたが、このポップアップが毎回表示されるようです。それは非常に初心者の質問です。

私は通常、プログラムを次のように定義します

#include<string>
using namespace std;

string x;

文字列を次のように定義する多数のコードサンプルがあります。

std::string.

これの目的は何ですか?それは良い習慣ですか、いくつかの機能がありますか?

48
OVERTONE

すでに述べたように、std名前空間全体またはstd::をインポートしない限り、std::stringを使用する必要があります(以下を参照)。

私の意見では、stringの代わりにstd::stringを使用したほうが、他の文字列実装ではなくstd::stringであることが明示的に示されているため、より良いと思います。

ただし、stringのみを記述する場合は、using std::string;の代わりにusing namespace std;を使用して、実際に必要なグローバル名前空間にのみインポートすることをお勧めします。

44
ThiefMaster

stringのフルネームはstd::stringです。これは、namespace std(すべてのC++標準ライブラリ関数、クラス、およびオブジェクトが存在する名前空間)に存在するためです。

コードでは、using namespace std;という行を明示的に追加しました。これにより、std::プレフィックスを使用せずに、標準の名前空間のすべてを使用できます。したがって、コンパイラはstd::stringを探すことを知っているので、stringの短縮形を使用してnamespace std(文字列型の実際の名前)を参照できます。

stringstd::stringは同じタイプであるため、機能上の違いはありません。ただし、stringよりもstd::stringを好む場合があります。たとえば、ヘッダーファイルでは、そのヘッダーを含むファイルの名前があいまいになる可能性があるため、行using namespace std;を配置する(または、名前空間を使用する)ことは一般に良い考えとは見なされません。この設定では、ヘッダーで#include <string>だけを実行し、std::stringを使用して文字列型を参照します。同様に、std::stringと他のstring型の間にあいまいさがあった場合、std::stringという名前を使用するとあいまいさがなくなります。

using namespace std;を含めるかどうかは、やや議論のあるトピックであり、多くのプログラマーはこれに強く反対しています。大規模なプロジェクトで作業するときは、使い慣れたものを使用し、使用されているコーディング規則を採用することをお勧めします。

13
templatetypedef

ssteinberg が言ったように、それは同じです。しかし、構文的にのみ。

私の経験から、フルネームを使用する方が便利です

std::string 

必要な場所、または明示的な

using std::string;

ソースファイルの先頭。

利点は、この方法でソースファイルの依存関係がより観察できることです。追加する場合

using namespace std;

つまり、コードはその名前空間内のあらゆるものに依存する可能性があります。

4
Assambar

usingnamespace stdでない場合は、std::stringを使用して、どのネームスペース文字列が属するかを指定する必要があります

1
MByD

あなたが持っている場合 using namespace std;コードの前は同じです。

0
ssteinberg