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