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