ADL로 인해 미묘하게 다른 시맨틱을 할인, 어떻게 일반적으로 사용해야 using
하며 왜? 상황에 따라 #include
다릅니 까 (예 : 헤더 가 아닌 소스 파일이되는 헤더 )?
또한, ::std::
또는 선호 std::
합니까?
네임 스페이스 수준
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
완전히 명시적임 :
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
네임 스페이스 수준의 사용 선언 :
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
함수 로컬 사용 선언 :
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { using std::make_pair; return make_pair(s.begin(), s.end()); }
로컬 기능
using namespace
:std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { using namespace std; return make_pair(s.begin(), s.end()); }
다른 것?
이것은 C ++ 14 이전을 가정하고 있으므로를 사용하여 반환 유형을 공제하지 않습니다 auto
.
::std::
대 std::
하지만.
std
두 번째 생각없이. std 네임 스페이스를 정의하는 누군가가 문제를 요구하고 있습니다 (그리고 아마도 대부분의 사람들이 사용 std
하고 있고 사용 하지 않는 것을 활용하기 위해 검색하고 있습니다 ::std
).