基本
以下の形を「using ディレクティブ」と呼び,名前空間名を省略する。
>=cpp
>using namespace 名前空間名; // using ディレクティブ directive
<
以下の形を「using 宣言」と呼び,シンボル名を名前空間名に属するものとみなす。
>=cpp
>using 名前空間名::シンボル名; // using 宣言 declaration
<
以下の形を「using ディレクティブ」と呼び,名前空間名を省略する。
>=cpp
>using namespace 名前空間名; // using ディレクティブ directive
<
以下の形を「using 宣言」と呼び,シンボル名を名前空間名に属するものとみなす。
>=cpp
>using 名前空間名::シンボル名; // using 宣言 declaration
<
一つだけ微妙だったところは namespace a::b::c みたいな宣言が出来ないことだったのだが,実はこの表記にも問題があって,例えば b の下に何かを追加したい時に柔軟性が無い。一見冗長だが,入れ子表記も簡単に展開出来てそれはそれで便利だったりする。
例えば,::foo::std::bar という変数があると ::foo::bar() という函数からは std::bar で参照出来る。誰が作んねんという話ではあるけど。