3

多くのソース ファイルで std 名前空間のみを使用する C++ プロジェクト (VC++ 2008) がありますが、「using namespace std;」を配置する「正しい」場所が見つかりません。

main.cpp に入れると、他のソース ファイルには広がらないようです。これをヘッダーファイルに入れたときは機能していましたが、その後、それは悪いと言われました。すべての .cpp ファイルに配置すると、コンパイラは std 名前空間を認識しません。

これはどのように行うべきですか?

4

6 に答える 6

2

あなたのヘッダーでは、メンバーの名前空間を完全に修飾するのが最善だと思います

#include <list>

class CYourClass
{
    std::list<int> myListOfInts;
    ...
};

cpp のどの関数でも引き続き完全に修飾できます

int CYourClass::foo()
{
    std::list<int>::iterator iter = myListOfInts.begin();
    ...
}

どこでも「名前空間 std を使用する」必要はありません。std:: を入力しすぎていることがわかった場合にのみ、「名前空間 std を使用する」をスローして、独自のキーストロークを保存し、コードの読みやすさを向上させるとよいでしょう。これは、ステートメントの範囲に限定されます。

int CYourClass::foo()
{
    using namespace std;
    list<int>::iterator iter = myListOfInts.begin();
    ...
}
于 2009-06-22T20:57:42.783 に答える
2

通常、次の 3 つの選択肢があります。

  1. スコープの使用 (std::Something)
  2. ソースファイルの先頭に using を置きます
  3. using を共通のヘッダー ファイルに入れる

最も一般的に受け入れられているベスト プラクティスは、#1 を使用することだと思います - メソッドがどこから来ているのかを正確に示します。

場合によっては、ファイルが名前空間からの取り込みに完全に依存しているため、ソース ファイルの先頭に using 名前空間を配置した方が読みやすくなります。怠け者であるためにこれを行うのは簡単ですが、この誘惑に屈しないようにしてください. 少なくとも、特定のソース ファイル内に配置することで、コードを管理している誰かに表示されます。

3 番目のインスタンスは、一般的に不適切な方法です。同じメソッドを定義している可能性のある複数の外部ソース ファイルに依存している場合、問題が発生する可能性があります。また、あなたのコードを保守している人にとっては、特定の宣言がどこから来ているのかわかりにくくなります。これは避けるべきです。

概要: スコープ付きインスタンス (std::Something) を使用することをお勧めします。これらの過度の使用によってコードの読みやすさと保守性が低下する場合を除きます。

于 2009-06-22T21:58:23.910 に答える
0

using namespace std;自分にとって便利だと思われるという理由だけで、コード全体に広めるのは良い考えではありません。しかし、それを主張する場合は、独自のコードをその名前空間にラップすることができます。そして、後で実際にメインファイルの関数/クラスを使用するときにのみ、を定義します using namespace std;。私が言っていることを強調するために、ここに例があります:

namespace std
{
   class MyNewClass
   {
       public:
             MyNewClass( ) { out << "Hello there" << endl;};
   };
}; 

int main( )
{
    std::MyNewClass tmp;
};
于 2009-06-22T21:04:38.620 に答える
0

複数の場所 (各 .cpp ファイル) に配置できます。

于 2009-06-22T20:58:01.973 に答える
0

基本的に、次のいずれかを選択する必要があります。

using namespace std1)すべての cpp ファイルに含めることによって「正しいことを行う」 、または

using namespace std2)いくつかの一般的なヘッダー ファイルを追加します。

どちらが良いかは人それぞれ意見は分かれると思いますが、私に言わせればusing namespace std、共通のヘッダーを入れることにしました。私の意見では、std名前空間はまさに「標準」であり、名前の競合は名前空間に依存するのではなく、コード レベルで解決する必要があります。

于 2009-06-22T20:58:42.003 に答える
0

名前空間は他のファイルに「広がり」ません。各ファイルに配置するか、クラスを明示的に呼び出す必要があります。

また:

名前空間 std を使用します。何とか << x;

また:

std::blah << x;

選択はスタイルの選択であり、どちらかが実際に機能します。

コンパイラが名前空間を「認識」しない場合は、それを宣言する定義ファイルが含まれていないためです(つまり、 include )

于 2009-06-22T21:00:40.733 に答える