2011-01-12 11 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"; 
} 

どのように動作しますか?名前空間がテストされている場合、testing :: AssertionResultは正しい使用法ではありませんか?

+0

これは、 'testing'が別の名前空間内の名前空間でないことを保証します。私は ':: testing'を使って、あなたがトップレベルで名前空間' testing'を使用していることを保証していると思います(しかし、私のアドバイスを取っていません、私はC++のnoobです)。 – dreamlax

+0

スコープ内の名前空間に "testing"という名前のネストされた名前空間が含まれている場合に発生する名前空間の競合を避けるため、ここでは単項スコープ演算子を使用します。たとえば、 "namespace foo {namespace testing {} class FooTest:public testing :: Test {};}"はGTestのテスト名前空間を呼び出しません。代わりに、foo.testingを使用しています。 –

答えて

3

::は、グローバル名前空間を参照するため、絶対パスと相対パスの指定と似ています。

+1

私は、C++標準ライブラリメンバのために:: stdの使用を強く勧めます。 @ strill:野球のバットとマーカーペンに投資する時間。 – Yttrill

+2

@Yttrill:野球のバットとマーカーペンに投資する時間。悪いところに「あなた自身のstdを作ってはいけない」と書いて、驚きの訪問をしてください。 –