เมื่อฉันอ่านมาตรฐานของ Google คุณไม่สามารถใช้using namespace foo;
คำสั่งได้ทุกที่ คำสั่งนี้นำทุกอย่างที่ประกาศในเนมสเปซและเป็นสาเหตุของการชนและพฤติกรรมที่ไม่คาดคิด คนอื่น ๆ อ้างถึงวิธีการทั่วไป: คุณมีวิธีสูงสุดหรือต่ำสุดของคุณเองและมันจะชนกันในไฟล์ src ที่มีคนรวมส่วนหัวกับวิธีการของคุณแล้วพูดว่าusing namespace std;
ในบางสถานที่จะได้รับอนุญาตให้มีการประกาศใช้ซึ่งเป็นของแบบฟอร์ม using ::foo::bar;
คนชอบใส่คำสั่งในรหัสของพวกเขาเพราะมันช่วยประหยัดการพิมพ์จำนวนมาก แต่มันมีความเสี่ยง หากคุณมีไฟล์ที่มีคำสั่ง cout จำนวนมากฉันสามารถเข้าใจว่าไม่ต้องการที่จะพิมพ์ std :: cout ร้อยครั้ง แต่คุณสามารถพูดโดยใช้ :: std :: cout ฉันปฏิบัติต่อสิ่งเหล่านี้เช่นการประกาศตัวแปร: กำหนดขอบเขตที่ต้องการ หากหนึ่งฟังก์ชันในไฟล์ 10 จำเป็นต้องเขียนเอาต์พุตไม่ต้องประกาศวิธี cout ที่ด้านบนวางไว้ในฟังก์ชันที่ทำเอาต์พุตจริง
#include <ostream>
//using namespace std; // NO!
//using ::std::cout; // less bad than using namespace, but I prefer to scope it
int main(int argc, char** argv)
{
int rc = do_some_stuff(argc, argv);
using ::std::endl;
if (rc) { // print the success report
using ::std::cout;
cout << "The test run completed. The return code was " << rc << '.' << endl;
} else {
using ::std::cerr;
cerr << "Unable to complete the test run." << endl;
}
return 0 == rc;
}
นั่นเป็นเรื่องเล็กน้อยมากที่มีเพียงสองบรรทัดที่ทำเอาท์พุต แต่คุณจะได้แนวคิด
อีกสิ่งหนึ่งที่สามารถทำได้คือนามแฝงหรือ typedef เพื่อลดการพิมพ์ ฉันไม่พบมาตรฐาน :: สิ่งที่จะไม่ดีว่า console_gui::command_window::append("text")
แต่เรามีชุดใหญ่ของแหล่งที่มากับโมดูลหลายโหลและบางครั้งเราต้องเขียนโค้ดเช่น ที่น่าเบื่อหลังจากที่ในขณะและทำให้เกิดเส้นยาวมาก ฉันทุกคนชอบอะไร
typedef console_gui::command_window cw;
cw::append("text");
ตราบใดที่นามแฝงทำในขอบเขตโลคัลและเก็บบริบทให้เพียงพอเพื่อให้โค้ดอ่านได้