2011-01-12 39 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

::前缀指的是全局命名空间,所以这就像绝对路径规范和相对路径规范。