無名名前空間

id:toppo0130C++では無名名前空間が便利過ぎるというのでどんなのか調べてみた.

無名名前空間
無名という名前のまま書き方は予想通りだった.

namespace
{
    int var;
    void func();
}

とするとファイルスコープになる(Cスタイルのstaticは非推奨).実際はユニークな識別子を振ることで,外部から参照出来なくしているらしい(ということは,色々と弄くれば外部から強引に見れるかもしれない?).

private
{
    int var;
    void func();
}

同じことをしようとすると,D言語だとこうなる.privateは実際参照できなくなるのだけど,同じファイルスコープはフレンド関係になるので問題はなし(この辺理解が怪しいw).

名前空間を無名にすることでファイルスコープとなる」というのは「静的領域なものにstaticをつけるとファイルスコープになる」とそれほど離れてるとは思わないなぁと感じている.まぁD言語のprivateの方が慣れていて直感的に感じているからかもしれない(後発なのだから当たり前といえば当たり前).
でも,Javaスタイルのパッケージは余り好きじゃないので,名前空間は欲しいなぁと思っている.

一番驚いたのは,"Anonymous namespace"だと思ってたのに"Unnamed namespace"だったこと.無名クラスは"Anonymous class"だし,変に統一されてない.*1

*1:C++らしいと言えばらしいw