C++에서 함수 선언 범위와 관련하여 질문이 있습니다. #include <cmath>
을 사용하면 전역 네임 스페이스에 함수 기호가 도입된다고 가정하십시오. 내 이해에 따르면 원칙적으로 심볼은 std
네임 스페이스에만 삽입해야하지만 실제로는 내 경험에 따라 일부 심볼이 전역 네임 스페이스에 표시됩니다. 이 대답은 이것을 확인한 것 같습니다 : cmath header confusion.C++ 전역 이름 공간의 함수와 같은 이름의 네임 스페이스에서 함수 선언
namespace foo { }
안에 함수 (전역 네임 스페이스의 함수와 동일한 프로토 타입)를 선언하면 어떻게됩니까? <cmath>
에서 sqrt()
글로벌 네임 스페이스에서 끝나는, 예를 들어 가정, 나는이 : 템플릿이 글로벌 네임 스페이스의 하나와 충돌한다처럼 보인다 기호 double sqrt(double x)
에 해결
#include <cmath>
namespace foo {
template <class T>
T sqrt(T x) {
// do something extra...
return std::sqrt(x);
}
}
// ...
void foo::bar() {
double a = 4.0;
double b = sqrt(a);
}
. 작동하는 것처럼 보이지만 일반적으로 나쁜 습관입니까?
더 일반적으로 네임 스페이스 내에서 선언 된 함수가 동일한 네임 스페이스 내부에서 사용될 때 전역 함수보다 우선합니까? 이것은 어떤 식 으로든 C++ 표준을 위반합니까?
인수 의존적 인 조회를 지적 해 주셔서 감사합니다! 이전에 몰랐던 메커니즘입니다. –