C++では指定された名前空間を使う処理として、using namespace
というものがあるが、これは使い所に注意が必要なものである。特にC++のプログラミング本では説明なしに使っている場合が多いので、特に気をつける必要がある。
using namespace
は、主にそのままでは冗長なコードを短くするのに往々にして使われる。例えば以下のようなコードがある。
#include <iostream>
#include <cstdlib>
int main()
{
std::string str = "Hello, world";
std::cout << str << std::endl;
return EXIT_SUCCESS;
}
この場合は、std::string
とstd::cout
、std::endl
が該当する。これらはstd
ネームスペースに含まれる命令、関数、型だが、これが多く含まれる場合、冗長になってしまう。これを簡潔にしたい場合は、以下のような記述になるだろう。
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
string str = "Hello, world";
cout << str << endl;
return EXIT_SUCCESS;
}
ここでは、using namespace std
で、std
に属する関数や型が使われるということを明示できる。この場合はファイル単位で使われる。
ただ、気をつけなければならないのは、インクルードに使われるヘッダーファイルには絶対にusing namespace
を使ってはいけないという点である。万が一それをしてしまうと、そのファイルにインクルードしている全てのファイルがその名前空間を使うということになってしまい、混乱が生じてしまうという他に、万一関数名や型の名前が一緒だった場合にビルドエラーが発生、あるいは予期せぬバグに見舞われるからである。
こういった問題点があるため、基本的には実装ファイルにとどめるべきである、できれば、以下のように関数単位で行うと良いだろう。
#include <iostream>
#include <cstdlib>
int main()
{
using namespace std;
string str = "Hello, world";
cout << str << endl;
return EXIT_SUCCESS;
}
こうすれば、main()
関数内だけにとどめることができる。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。