::foo()
이라는 함수에서 구문이 무엇인지 이해하지 못합니다. foo::count_all()
인 경우 count_all
은 클래스 또는 네임 스페이스 foo
의 함수임을 알고 있습니다.C++의 구문 :: function_name은 무엇을 의미합니까?
::foo()
의 경우 ::
은 무엇입니까?
::foo()
이라는 함수에서 구문이 무엇인지 이해하지 못합니다. foo::count_all()
인 경우 count_all
은 클래스 또는 네임 스페이스 foo
의 함수임을 알고 있습니다.C++의 구문 :: function_name은 무엇을 의미합니까?
::foo()
의 경우 ::
은 무엇입니까?
::
연산자 namespace
또는 class
호출된다. 귀하의 경우 그것은 명명 된 네임 스페이스에없는 모든 것 인 전역 네임 스페이스를 호출합니다.
아래 예제는 네임 스페이스가 중요한 이유를 보여줍니다. foo()
으로 전화하면 2 foo
이 있기 때문에 전화를받을 수 없습니다. 글로벌 주소를 ::foo()
으로 해결해야합니다.
namespace Hidden {
int foo();
}
int foo();
using namespace Hidden; // This makes calls to just foo ambiguous.
int main() {
::foo(); // Call to the global foo
hidden::foo(); // Call to the foo in namespace hidden
}
니스. 이것은 좋은 예입니다. 방금 왜 필요한지 명확하게하기 위해 조금 추가했습니다. –
@FantasticMrFox 내 답변에 진심으로 감사드립니다. 정말 고맙습니다. –
예를 들어 주셔서 감사합니다. –
::
전역 이름 공간을 나타 내기 전에 아무 것도 입력하지 마십시오. 예를 들면 :
int foo(); // A global function declaration
int main() {
::foo(); // Calling foo from the global namespace.
...
전역 범위의 함수 foo()에 대한 선언이 아닌 함수 호출입니다. ::는 함수 이름 앞에 명시 적으로 전역 함수 foo()를 호출하고 일부 다른 foo() 버전은 더 좁은 범위에서 호출하지 않으려 함을 의미합니다.
예.
void foo()
{
printf("global foo\n");
}
namespace bar
{
void foo()
{
printf("bar::foo\n");
}
void test()
{
foo();
::foo();
}
}
:: 테스트 바()를 호출 인쇄됩니다
bar::foo
global foo
를 지정하여 :: 당신이 전역 네임 스페이스를보고 시스템을 이야기했다.
https://stackoverflow.com/a/6790112/249492
아래는 @CharlesBailey하여 예입니다이 문서를보기, 우리는 "둥지"네임 스페이스의 내부입니다. 전역 네임 스페이스를 사용하도록 지정했는지에 따라 "x"에 대한 액세스 권한을 상위 네임 스페이스로 변경할 수 있습니다.
namespace layer {
namespace module {
int x;
}
}
namespace nest {
namespace layer {
namespace module {
int x;
}
}
using namespace /*::*/layer::module;
}
의
링크를 공유하지 마십시오. 답에 관련 정보를 추가하십시오. –
@FantasticMrFox, 의견에 감사드립니다. 그 생각은 중복 된 응답을 줄이는 것이 었습니다. 나는 예를 제시하면서 나의 대답을 업데이트했다. – Damian
가능한 복제 [왜 ::와 앞에 추가 공간, 예 : 표준 : : 벡터 (https://stackoverflow.com/questions/4925394/why-prepend-namespace-with-for-example -stdvector) –