การลดความหมายที่แตกต่างกันอย่างละเอียดเนื่องจาก 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
)