ADL nedeniyle farklı semantikleri indirim yapmak, genellikle nasıl kullanmalıyım usingve neden? Duruma bağlı mıdır (örneğin, #included'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::.
stdikinci olmadan kullanıyorum . Bir std ad alanını tanımlayan biri sorun istiyor (ve muhtemelen çoğu insanın kullandığı stdve kullanmadığı avantajlardan yararlanmak için ::std).