2011-01-12 8 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++ 놈입니다). – dreamlax

+0

범위의 네임 스페이스에 "testing"이라는 중첩 네임 스페이스가 포함 된 경우 발생하는 네임 스페이스 충돌을 방지하기 위해 단항 범위 연산자가 여기에 사용됩니다. 예 : "namespace foo {namespace testing {} class FooTest : public testing :: Test {};}"는 GTest의 테스트 네임 스페이스를 호출하지 않습니다. 대신 foo.testing을 사용합니다. –

답변

3

:: 접두사는 전역 네임 스페이스를 나타내므로 절대 경로 대 상대 경로 지정과 같습니다.

+1

C++ 표준 라이브러리 멤버에 대해 :: std를 사용하는 것이 좋습니다. 누군가 "std"라는 네임 스페이스를 가지고있는 경우를 대비하여 일반 "std"를 사용하지 마십시오. 나에게 일어난 일입니다. – Yttrill

+2

@Yttrill : 야구 방망이와 마커 펜에 투자 할 시간. "나만의 표준을 세우지 마라"를 쓰고 깜짝 방문을하십시오. –

관련 문제