私は他の人に同意します。名前の衝突、あいまいさを求めていますが、事実はそれほど明確ではありません。私は使用を見ることができますがusing
、私の個人的な好みはそれを制限することです。他の人が指摘したことも強く考えます:
かなり一般的な名前である可能性がある関数名を検索したいが、std
名前空間でのみ検索したい場合(またはその逆- 名前空間、名前空間、...にないすべての呼び出しを変更したい場合)、次に、これを行うにはどうすればよいですか?std
X
それを行うためのプログラムを書くこともできますが、プロジェクトを維持するためのプログラムを書くよりも、プロジェクト自体に時間を費やす方がいいのではないでしょうか。
個人的には、私は実際にはstd::
プレフィックスを気にしません。私はそれを持たないよりも外観が好きです。それが明示的で「これは私のコードではない...私は標準ライブラリを使用している」と言っているのか、それ以外の何かであるかはわかりませんが、見た目は良いと思います。私が最近C ++を始めたばかりであることを考えると、これは奇妙かもしれません(Cと他の言語をずっと以前から使用していて、Cは、アセンブリのすぐ上で、私のお気に入りの言語です)。
上記のことや他の人が指摘していることと多少関係がありますが、もう1つあります。これは悪い習慣かもしれませんがstd::name
、標準ライブラリのバージョンと名前をプログラム固有の実装用に予約することがあります。はい、確かにこれはあなたに噛みつき、一生懸命噛む可能性がありますが、すべて私がこのプロジェクトをゼロから始めたことに帰着し、私が唯一のプログラマーです。例:オーバーロードstd::string
して呼び出しますstring
。役立つ追加があります。私がCとUnix(+ Linux)で小文字の名前を使用する傾向があったためです。
それ以外に、名前空間のエイリアスを持つことができます。以下は、言及されていない可能性のある有用な例です。私はC ++ 11標準、特にlibstdc ++を使用しています。まあ、それは完全なstd::regex
サポートを持っていません。確かに、コンパイルはできますが、プログラマー側のエラーとして、例外をスローします。しかし、それは実装の欠如です。
だからここに私がそれを解決した方法があります。Boostの正規表現をインストールしてリンクします。次に、libstdc ++が完全に実装したときにこのブロックを削除するだけでコードが同じになるように、次のようにします。
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
それが悪い考えであるかどうかについては議論しません。しかし私はそれがためにきれいに保つことを主張するだろう、私のプロジェクトと同時に、それは特定ます:確かに、私はブーストを使用する必要があります、しかし、私はのlibstdc ++最終的にそれを持っていますようにそれを使用しています。はい、独自のプロジェクトを開始し、最初から標準(...)で開始することは、メンテナンス、開発、およびプロジェクトに関連するすべてを支援するのに非常に役立ちます。
何かを明確にするためだけに:STLでクラスの名前を意図的に、より具体的に代わりに使用することは、実際には良い考えではないと思います。文字列は私にとっては例外です(最初の文字列、上、または2番目の文字列は無視してください。必要であればしゃれます)。私は「文字列」の概念が好きではなかったためです。
それでも、私はまだCに偏っていて、C ++に偏っています。詳細を節約すると、私が取り組んでいることのほとんどがCに適合します(しかし、それは良い練習であり、自分自身を作るための良い方法でした。閉鎖的ではなく、傲慢さが少なく、より受け入れやすくなっています。しかし、何がある便利なことは、一部が既に提案するものである:私は確かに私が何をした場合、名前が衝突する原因となる2名前を付けるためにソート(同じことを)(?それはかなり一般的で、それはない)リストを使用し、かusing namespace std;
、などをそのために、私は具体的に制御することを好み、それを標準的な使用にするつもりなら、それを指定する必要があることを知っています。簡単に言えば、許可された仮定はありません。
Boostの正規表現をの一部にすることについても同様ですstd
。私はこれを将来の統合のために行います-繰り返しますが、これは完全にバイアスであることを認めます-それは醜いほどではないと思いますboost::regex:: ...
。確かに、それは私にとってもう1つのことです。C ++には、見た目やメソッドでまだ完全に受け入れるには至っていないことがたくさんあります(別の例:可変引数テンプレートとvar引数[可変引数テンプレートは非常に便利だと認めていますが])。私が受け入れるものでさえ、それは困難でした、そして、私はまだ彼らと問題を抱えています。