namespace android {
extern int i; // declare here but define somewhere
void foo ();
}
-- は、特定の名前内の変数と関数のスコープに使用されます。これらの変数/関数を使用/呼び出している間は、スコープ解決演算子を使用して::
ください。例えば
int main ()
{
android::foo();
}
namespace
すべての宣言を 1 つの body インスタンスに入れることに制限はありません。複数namespace android
のファイルにまたがる複数の本文が可能であり、推奨される場合もあります。例えば
// x.cpp
namespace android {
void somefunc_1 ();
}
// y.cpp
namespace android {
void somefunc_2 ();
}
現在、::
演算子を頻繁に使用すると不便な場合があり、名前が不必要に長くなります。その際、using namespace
ディレクティブを使用できます。
このusing
ディレクティブは、関数スコープ / 名前空間スコープ / グローバル スコープで使用できます。しかし、class
範囲内では許可されていません:なぜ「名前空間 X を使用する」; クラス/構造体レベル内では許可されていませんか? )。
int main ()
{
using namespace android;
foo(); // ok
}
void bar ()
{
foo(); // error! 'foo' is not visible; must access as 'android::foo()'
}
ところで、using namespace android;
グローバルに宣言されていた(つまり、上記main()
)ので、それなしでもfoo()
アクセスできます。::
Bar()