1. ホーム
  2. c++

[解決済み] C++の名前空間をヘッダとソースに作成する(cpp)

2023-01-11 16:08:44

質問

ヘッダーファイルとcppファイルの内容を名前空間でラップするのと、ヘッダーの内容だけをラップして namespaceを使用する とするのとでは、何か違いがあるのでしょうか?

違いというのは、パフォーマンスの低下や、問題を引き起こす可能性のある微妙に異なるセマンティクス、または私が注意する必要があるものを意味します。

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
namespace X
{
  void Foo::TheFunc()
  {
    return;
  }
}

VS

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
using namespace X;
{
  void Foo::TheFunc()
  {
    return;
  }
} 

違いがない場合、どのような形が好ましいですか?その理由は?

どのように解決するのですか?

名前空間は、関数のシグネチャを衝突しないように加工する方法に過ぎません。ある人は最初の方法を好み、他の人は2番目のバージョンを好みます。どちらのバージョンもコンパイル時のパフォーマンスには影響を与えません。名前空間は単なるコンパイル時のエンティティであることに注意してください。

名前空間の使用で生じる唯一の問題は、同じネストした名前空間名がある場合です(例) X::X::Foo . このような場合、キーワードの使用有無にかかわらず、より多くの混乱を引き起こします。