Обесценивая слегка различную семантику из-за ADL, как я должен вообще использовать usingи почему? Это зависит от ситуации (например, заголовок, который будет #included против исходного файла, который не будет)?
Кроме того, я должен предпочесть ::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()); }Что-то другое?
Это предполагает pre-C ++ 14 и, таким образом, не использует возврат типа возврата auto.
::std::против std::хотя.
stdбез второго, хотя. Кто-то, определяющий пространство имен std, напрашивается на неприятности (и, вероятно, ищет преимущества, которые использует большинство людей, stdа не нет ::std).