タグ付けされた質問 「using-directives」

30
なぜ「ネームスペースstdを使用する」のですか?悪い習慣と考えていますか?
私は書くことを他人に言われてきたusing namespace std;コードでは間違っている、と私は使うべきであるとstd::coutし、std::cin代わりに直接。 なぜusing namespace std;悪い習慣と見なされますか?非効率的ですか、あいまいな変数(std名前空間内の関数と同じ名前を共有する変数)を宣言するリスクがありますか?パフォーマンスに影響しますか?

7
ディレクティブを使用して配置するためのVisual StudioまたはResharper機能
私は、usingディレクティブを現在の名前空間内に配置し、VSとResharperがデフォルトでそれらを配置するため、外部には配置しないようにしています。 未使用のディレクティブを使用して並べ替え/削除し、現在のネームスペース内に配置するマクロ/標準機能を知っている人はいますか?

2
なぜ「システムを使用する」のか 悪い習慣とは考えていませんか?
私はC ++のバックグラウンドを持っており、この質問に対する回答を完全に理解して同意します。悪い習慣と考えていますか? だから、C#の経験があると、正反対のことがわかり using Some.Namespace;ます。文字通りどこでも使用されています。タイプの使用を開始するときはいつでも、そのネームスペースのusingディレクティブを最初に追加します(まだ存在しない場合)。.csで始まらなかった-file を見たことを思い出せませんusing System; using System.Collections.Generic; using X.Y.Z; etc...。実際、Visual Studioウィザードを使用して新しいファイルを追加すると、必要がない場合でも、いくつかのusingディレクティブが自動的に追加されます。したがって、C ++コミュニティでは基本的にリンチされますが、C#でもこれを行うことを推奨しています。少なくともこれは私にはそれが見える方法です。 現在、C#とC ++でディレクティブを使用することはまったく同じではないことを理解しています。また、using namespaceC ++でできる最も厄介なことの1つ、つまりヘッダーファイルに配置することの1つは、ヘッダーファイルとの概念がないため、C#で同等に厄介なものがないことを理解しています#include。 ただし、それらの違いにもかかわらず、C#とC ++でのディレクティブの使用は同じ目的に役立ちます。これはSomeType、ずっと長くするのではなく、常に入力するだけで済みますSome.Namespace.SomeType(C ++ ::ではの代わりに.)。これと同じ目的で、名前の衝突という危険も私には同じように見えます。 最良の場合、これによりコンパイルエラーが発生するため、修正する必要があるのは「のみ」です。最悪の場合でもコンパイルされ、コードは意図したものとは異なる動作をします。だから私の質問は:なぜ(どうやら)C#とC ++であまりにも悪いと考えられているディレクティブを使用しているのですか? 私が持っている答えのいくつかのアイデア(これらはどれも本当に私を満足させません): 名前空間は、C ++よりもC#の方がはるかに長く、ネストされる傾向があります(stdvs. System.Collection.Generic)。したがって、この方法でコードのノイズを除去することには、より多くの欲求と利益があります。しかし、これが真実であっても、この議論は標準の名前空間を調べたときにのみ適用されます。カスタムのものには、C#とC ++の両方で、任意の短い名前を付けることができます。 名前空間は、C ++よりもC#の方がはるかに「細かい」ように見えます。例として、C ++では標準ライブラリ全体std(およびのようないくつかの小さなネストされた名前空間chrono)が含まれますがSystem.IO、C#ではSystem.Threading、System.Textなどがあります。したがって、名前の衝突のリスクは小さくなります。しかし、これはただの直感です。私は実際にどのように多くの名前を使用すると、「インポート」カウントされませんでしたusing namespace stdとusing System。繰り返しになりますが、これが真実であっても、この議論は標準の名前空間を見たときにのみ適用されます。独自のものは、C#とC ++の両方で、必要に応じて細かく設計できます。 もっと議論はありますか?私は実際の難しい事実(もしあれば)に特に興味があり、意見にはあまり興味がありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.