2011-01-12 64 views
1

可能重複:
What's the purpose of a leading 「::」 in a C++ method call命名空間開始與::在C++

This gtest具有示例代碼。

::testing::AssertionResult IsEven(int n) { 
    if ((n % 2) == 0) 
    return ::testing::AssertionSuccess(); 
    else 
    return ::testing::AssertionFailure() << n << " is odd"; 
} 

它是如何工作的?如果命名空間正在測試,是不是測試:: AssertionResult是正確的用法?

+0

這可確保`testing`不是另一個名稱空間內的名稱空間。我認爲使用`:: testing`確保你在頂層使用名稱空間`testing`(但不要接受我的建議,我是C++的noob)。 – dreamlax 2011-01-12 04:13:27

+0

這裏使用一元作用域操作符來避免如果作用域中的名稱空間包含名爲「testing」的嵌套名稱空間時發生名稱空間衝突。例如:「namespace foo {namespace testing {} class FooTest:public testing :: Test {};}」不會調用GTest的測試命名空間。相反,它使用foo.testing。 – 2011-01-12 04:44:42

回答

3

::前綴指的是全局命名空間,所以這就像絕對路徑規範和相對路徑規範。