2016-07-27 39 views
1

我在C++中知道,我們使用::來限定變量或函數的命名空間,如myNamespace::a。但我注意到一些用法,如::myFunction()。這是否意味着該功能屬於全局命名空間?Does :: myFunction()屬於全局命名空間嗎?

+0

這只是確保了全局命名空間,而不是你在命名空間中出現該決議請訪問http://計算器。 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

@Leon,是的,是固定的。 –

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/語言/ decltype)來解決具有相同大小的類型。例如:'static_assert(std :: is_same :: value,「應該是不同的類型」);'' – user4581301