C++ における名前空間

描主宇田川浩行K#F85E
下描き希哲7年(2013年)
10月11日 22:07
利承
ライセンス
希哲館普通利承(KULクール

基本

以下の形を「using ディレクティブ」と呼び,名前空間名を省略する。


using namespace 名前空間名; // using ディレクティブ directive

以下の形を「using 宣言」と呼び,シンボル名を名前空間名に属するものとみなす。


using 名前空間名::シンボル名; // using 宣言 declaration

この描出は「素描」です。

一覧

=}{*}

一つだけ微妙だったところは namespace a::b::c みたいな宣言が出来ないことだったのだが,実はこの表記にも問題があって,例えば b の下に何かを追加したい時に柔軟性が無い。一見冗長だが,入れ子表記も簡単に展開出来てそれはそれで便利だったりする。

=}{*}

C++ の名前空間って結構馬鹿にされている印象があるが,実は の基礎として C++ を選んだ時の主な理由は,名前空間や ADL も含めて大規模な名前の構造化が可能だったことがある。私が「名前世界」(nameworld)と呼んでいた網羅的な名前体系を実現出来る環境だった。

=}{*}

例えば,::foo::std::bar という変数があると ::foo::bar() という函数からは std::bar で参照出来る。誰が作んねんという話ではあるけど。

=}{*}

あと,久しぶりにこの辺の調べものをしていて思い出したのだが,C++std:: を前に付けたところで実は全然厳格じゃない気がする。相対場筋(パス)みたいなものなので……std という文字列自体が予約されていれば問題無いとは思うが。

=}{*}

::std:: をあれこれ弄ろうとしたのだが,明示的に禁止されてはいないとはいえ,C++ 標準 との相互運用性等を考えるとこれは避けた方がいいだろうし,::xtd:: って意外とよく考えた命名だなと思った。

出力論組プログラム虎哲*イチ 1.01
制作・運営:希哲社
© K1-13 (2007-2019) KiTetuSha