ADL nedeniyle farklı semantikleri indirim yapmak, genellikle nasıl kullanmalıyım using
ve neden? Duruma bağlı mıdır (örneğin, #include
d'ye karşılık gelen başlık, kaynak dosyaya karşı değil)?
Ayrıca, ben tercih etmeliyiz ::std::
yoksa std::
?
Ad alanı düzeyi
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Tamamen açık olmak:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Ad alanı düzeyinde kullanma bildirimleri:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
İşlev-yerel kullanım-bildirimleri:
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()); }
Yerel işlev
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()); }
Başka bir şey?
Bu, C ++ 14 öncesi olduğu varsayılmaktadır ve dolayısıyla geri dönüş tipi kesinti kullanılmamaktadır auto
.
::std::
vs vs merak std::
.
std
ikinci olmadan kullanıyorum . Bir std ad alanını tanımlayan biri sorun istiyor (ve muhtemelen çoğu insanın kullandığı std
ve kullanmadığı avantajlardan yararlanmak için ::std
).