Giảm giá một cách tinh tế các ngữ nghĩa khác nhau do ADL, tôi thường nên sử dụng như thế nào using
và tại sao? Có phụ thuộc vào tình huống không (ví dụ: tiêu đề sẽ là #include
d so với tệp nguồn sẽ không)?
Ngoài ra, tôi nên thích ::std::
hay std::
?
Cấp độ không gian
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Hoàn toàn rõ ràng:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Khai báo cấp độ không gian tên:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Khai báo chức năng-cục bộ:
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()); }
Chức năng cục bộ
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()); }
Thứ gì khác?
Đây là giả định tiền C ++ 14, và do đó không sử dụng loại trừ trả về auto
.
::std::
so với std::
mặc dù.
std
mà không có thứ hai mặc dù. Ai đó xác định một không gian tên std đang yêu cầu sự cố (và có thể tìm kiếm để tận dụng lợi thế mà hầu hết mọi người đang sử dụng std
và không ::std
).