[解決済み] c++のヘッダーで "using namespace "を使用する [重複] [重複
質問
私たちのc++のコースでは、すべての教師がいつも
using namespace std;
のすぐ後に
#include
の直後に
.h
ファイルに追加することができます。これは、他のプログラムでそのヘッダーをインクルードすることによって、私のプログラムに名前空間がインポートされることになるため、危険であると思われます。
ですから、私の質問は二重です。私が正しいのは
using namespace
はヘッダーファイルで使ってはいけないというのは正しいのでしょうか、そして/または、それを元に戻す方法はあるのでしょうか、このような。
//header.h
using namespace std {
.
.
.
}
もう一つ、同じような質問をします。ヘッダーファイルは
#include
は、対応するすべてのヘッダを
.cpp
ファイルが必要とするヘッダを、ヘッダ定義に必要なものだけにして
.cpp
ファイル
#include
として宣言するか、あるいは何もせず、必要なものすべてを
extern
?
質問の理由は、上記と同じです。を含むときに驚かないようにしたいのです。
.h
ファイルを含むときに驚かないようにするためです。
また、もし私が正しければ、これはよくある間違いなのでしょうか?私は、実際のプログラミングと、そこにある "real" プロジェクトにおいてを意味します。
ありがとうございます。
どのように解決するのですか?
このような場合、絶対に
using namespace
を使うべきではありません。まさにあなたが言うような理由で、そのヘッダを含む他のファイルのコードの意味を予期せず変えてしまう可能性があるからです。を元に戻す方法はありません。
using namespace
を元に戻す方法がないのも、危険な理由のひとつです。私は通常、単に
grep
などで
using namespace
がヘッダで呼び出されていないことを確認するために、もっと複雑なことをするよりも。おそらく静的コードチェッカーもこれにフラグを立てます。
ヘッダは、コンパイルに必要なヘッダだけを含むべきです。これを強制する簡単な方法は、常に各ソースファイル自身のヘッダーを、他のどのヘッダーよりも先に、最初にインクルードすることです。そうすれば、ヘッダーが自己完結していない場合、そのソースファイルはコンパイルに失敗します。場合によっては、例えばライブラリの中の実装の詳細なクラスを参照するような場合、前方宣言の代わりに
#include
の代わりに前方宣言を使用することができます。
よくあることだと言えるかどうかはわかりませんが、間違いなくたまに現れます。たいてい、新しいプログラマが書いたもので、その悪影響に気づいていません。通常、リスクについて少し教育するだけで、修正するのが比較的簡単なので、どんな問題にも対処できます。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] JavaScriptで名前空間を宣言するには?
-
[解決済み] C++はなぜ別のヘッダーファイルが必要なのですか?
-
[解決済み] なぜcppファイルをインクルードせず、ヘッダを使用する必要があるのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] "vector "がこのスコープで宣言されていません。
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?