2011-01-27 10 views
6

C++では、関数実装ファイルでusing namespace std;宣言を使用できますか?関数実装で名前空間を使用する

+5

私は本当にあなたの質問を理解していないようです...あなたはいくつかの情報を与えることができますか? – Stormenet

答えて

12

「機能実装ファイル」とは、.hファイルまたは.cppファイルを意味しますか? (私は通常.cppファイルを "implementation"ファイルと呼びますが、.hファイルは "interface"ファイルです)。

.cppファイルを意味するのなら、もちろんです。それは普通あなたがusing namespace stdと見る場所です。これは、この.cppファイル内のすべてのコードが修飾なしでstdにアクセスできることを意味します。

.hファイルを意味する場合、になりますが、そうしないでください。 .hファイルに含めると、.hファイルを含む.cppファイルに自動的に適用されます。このファイルは大量のファイルである可能性があります。あなたは一般的に、インポートする名前空間を他のモジュールに伝えたくありません。共通の.hファイルではなく、すべての.cppファイルに格納することをお勧めします。

+0

はい、私はcppファイルを意味します。私はメインのcppファイルのnamespace stdと関数 ".cpp"(メイン関数ではない)の "std ::"を使用しているので、関数cppファイルの名前空間を使うのは興味があります。 – Sean

+2

@Sean: "main" .cppファイルに特別な規則はありません。 'main'_function_(intのみ可能)に関するルールはいくつかありますが、それらのルールは同じファイルに定義されている他の関数やクラスには何の影響も与えません。 – MSalters

4

"function implementation files"とは、.C/.cppなどのファイルを意味する場合は避けてください。代わりにusing std::cout;using std::endl;にこれらの2つを注入するだけで<iostream>std::coutなどが必要な場合は、coutendlと書くことができます。

6

私はあなたがこのような何かを意味すると仮定しています:その場合はそうそして、...

// Foo.h 

void SayHello(); 

// Foo.cpp 

#include "Foo.h" 

using namespace std; 

void SayHello() 
{ 
    cout << "Hello, world!" << endl; 
} 

を。しかし、大きなプロジェクトでusing namespace std;を使用することは悪い習慣と考えられます。

+1

私は、実装ファイルでさえも "名前空間の使用"を避けようとしますが、後で名前の競合が発生する単一の翻訳単位を使用したいとします。 – GameDeveloper

70

using namespace std;を次のように関数本体に入れることもできます。これにより、using namespaceステートメントの範囲が制限されます。

void f() { 
    using namespace std; 
    cout << "Foo" << endl; 
    //.. 
}; 

void g() { 
    cout << "Bar" << endl; //ERROR: cout and endl are not declared in this scope. 
}; 

あなたはヘッダファイルに書き込まれている機能(あなたはいけないそれ自体の本体に名前空間の要素の多くを使用したい場合、これは便利ですが、時にはそれはOKです(例えば、テンプレート)など)が含まれます。

関連する問題