[解決済み] 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
. このような場合、キーワードの使用有無にかかわらず、より多くの混乱を引き起こします。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] JavaScriptで名前空間を宣言するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] C++: 名前空間 -- ヘッダファイルやソースファイルでの正しい使い方は?