由于ADL造成了语义上的细微差别,我通常应如何使用using
?为什么?是否与情况有关(例如,标头为#include
d而源文件为d)?
另外,我该选择::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
。