Googleの標準を読むと、using namespace foo;
どこでもディレクティブを使用できません。このディレクティブは、名前空間で宣言されたすべてを取り込み、衝突と予期しない動作の一般的な原因です。他の人は非常に一般的なものを引用しています:あなたはどこかに独自のmaxまたはminメソッドがあり、誰かがあなたのメソッドにヘッダーを含めてから言うsrcファイルで衝突しますusing namespace std;
特定の場所では、次の形式のusing宣言を使用できます。 using ::foo::bar;
タイピングの手間を省くため、コードにディレクティブを使用するのが好きですが、リスクが伴います。多くのcoutステートメントを含むファイルがある場合、std :: coutを100回入力する必要がないことは理解できますが、:: std :: coutを使用して単純に言うことができます。これらを変数宣言のように扱います。必要な場所にスコープを設定します。10のファイル内の1つの関数が出力を書き込む必要がある場合、先頭でcoutの方法を宣言せずに、実際の出力を行う関数にそれを配置します。
#include <ostream>
//using namespace std; // NO!
//using ::std::cout; // less bad than using namespace, but I prefer to scope it
int main(int argc, char** argv)
{
int rc = do_some_stuff(argc, argv);
using ::std::endl;
if (rc) { // print the success report
using ::std::cout;
cout << "The test run completed. The return code was " << rc << '.' << endl;
} else {
using ::std::cerr;
cerr << "Unable to complete the test run." << endl;
}
return 0 == rc;
}
それはほんの数行で出力を行うという極端なものですが、アイデアは得られます。
もう1つできることは、入力を最小限に抑えるエイリアスまたはtypedefです。私はstd :: whateverが悪いとは思いませんが、数十個のモジュールを備えた膨大なソースセットがあり、時にはのようなコードを記述する必要がありますconsole_gui::command_window::append("text")
。それはしばらくすると退屈になり、多くの長い行を引き起こします。私はすべてのようなものです
typedef console_gui::command_window cw;
cw::append("text");
エイリアスがローカルスコープで行われ、コードを読み取り可能にするのに十分なコンテキストを保持している限り。