2016-07-27 16 views
1

C++では、::を使用して、myNamespace::aのように変数または関数の名前空間を修飾します。しかし、私は::myFunction()のようないくつかの用途に気付きます。関数がグローバル名前空間に属しているのでしょうか?:: myFunction()はグローバル名前空間に属していますか?

+0

これは単に解像度がグローバル名前空間の代わりに、あなたがしている名前空間に発生することを保証します。httpを参照してください://のstackoverflowを。 com/questions/4269034 /前置きのダブルコロン – larrylampco

答えて

3

コードがコンパイルされた場合は、::myFunction()がグローバル宣言myFunctionを参照しています。

ローカル定義がグローバル定義をシャドウするときこれは最も一般的に使用されます。

namespace local { 
    int myFunction() {}; // local namespace definition 
}; 
int myFunction() {}; // global definition. 
using namespace local; 

int main() { 
    // myFunction(); // ambiguous two definitions of myFunction in current scope. 
    local::myFunction(); // uses local::myFunction(); 
    ::myFunction(); // uses global myfunction(); 
+0

@ Reon、yes、fixed。 –

3

はい、それはそれはグローバル名前空間で使用可能である必要があり、以下の変数、型や機能を意味します。何かがローカル定義の影された場合には、例えば使用することができます

struct S { 
    int i; 
}; 

void f() { 
    struct S { 
    double d; 
    }; 

    S a; 
    ::S b; 

    static_assert(sizeof(a) != sizeof(b), "should be different types"); 
} 
+1

['type_traits'](http://en.cppreference.com/w/cpp/header/type_traits)と[' decltype'](http://en.cppreference.com/w/cpp/)を見てください。 language/decltype)を使用して同じサイズの型を取得します。 'static_assert(std :: is_same :: value、"異なる型でなければなりません ");' – user4581301

関連する問題