Diskon semantik yang berbeda karena ADL, bagaimana seharusnya saya gunakan secara umum using
, dan mengapa? Apakah ini tergantung situasi (mis. Tajuk yang akan menjadi #include
d vs file sumber yang tidak akan)?
Juga, haruskah saya lebih suka ::std::
atau std::
?
Namespace-level
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Menjadi sepenuhnya eksplisit:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Namespace-level using-declarations:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Function-local using-declarations:
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()); }
Fungsi-lokal
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()); }
Sesuatu yang lain
Ini mengasumsikan pra-C ++ 14, dan dengan demikian tidak ada tipe pengembalian yang digunakan auto
.
::std::
vs std::
sekalipun.
std
tanpa yang kedua sekalipun. Seseorang yang mendefinisikan namespace std meminta masalah (dan mungkin mencari untuk mengambil keuntungan yang kebanyakan orang gunakan std
dan tidak ::std
).