無名のnamespaceの中にstatic?
1月 14th, 2009 Posted in C++C++の名前空間を定義するnamespaceってあんまり使わない。たぶん有用な使い方があるんだろうと思うけど、所属しているチームではほとんど使われていないので、今まで積極的に使おうとは思っていなかった。
using namespaceはたまに使う。まあアレです。
- using namespace std;
です。これを書いておくと
- std::vector v;
を
- vector v;
って書くことができる。
無名のnamespace
最近、新しいプロジェクトに関わるようになってきて、初めてのコードをよく読むようになりました。その中で、cppファイルのグローバルな領域に以下のような記述が。
- namespace {
- const TCHAR szHoge[] = _T("Hoge\Hoge");
- }
ほう、こういう書き方があるるんだねぇと思って調べると、無名の名前空間はグローバルなstatic変数に変わる書き方で、C++ではグローバルなstaticの代わりに無名の名前空間を使うことが推奨されているらしい。
なるほど。無名の名前空間内の変数はグローバルなstatic変数と。よしよし。
と思って他のソースを読んでいると、今度は以下のような記述が!
- namespace {
- static const int nHoge = 50;
- }
“static const”は定数を定義するときに使うんだけど、無名の名前空間内にstaticを付ける意味ってあるんだろうか。よくわからんのでこのコードを書いた人に聞いてみよう。
追記:書いた本人に聞いてみた
無名の名前空間内のstatic変数ですが、これはもともと
- static const int nHoge = 50;
だったコードがあって、チーム内の方針でグローバルな静的変数は無名の名前空間内で定義するように変更しようってことで、staticは付けたまま上記のようになったということです。つまりあんまり深い意味はないそうです。
こちらもオススメ!