C++進階--名稱空間和關鍵字using
阿新 • • 發佈:2018-12-25
//############################################################################ /* * C++關鍵字:using * * 1. using指示: 將名稱空間所以成員引入當前作用域 * 例子: */ using namespace std; /* 2. using宣告 * a. 將一個特定名稱空間成員引入當前作用域 * b. 將一個成員從基類引入當前類的作用域 * 例子: */ using std::cout; cout << "Hello world.\n"; using namespace std; // case 1, global scope using std::cout; // case 2.a, gloabal scope class B { public: void f(int a); }; class D : private B { public: void g() { using namespace std; // case 1, local scope cout << "From D: \n"; } void h() { using std::cout; // case 2.a, local scope cout << "From D: \n"; } using B::f; // case 2.b, class scope }; D d; d.f(8); /* Notes: * 1. using宣告和using指示用於名稱空間時,可以在全域性或者區域性作用域 * 2. using聲明當用於類成員時,可以用於類作用域。下面是一個使用例子 */ class B { public: void f(int a); }; class D : public B { public: using B::f; void f(); //先從最近的派生類搜尋,命中之後就停止搜尋,再檢查引數是否匹配 }; int main() { D d; d.f(8); //編譯錯誤,可通過加using B::f修復; } /* * 匿名的名稱空間 */ static void h() { std::cout << "h()\n"; } void g() { std::cout << "global g()\n"; } namespace { void g() { std::cout << "g()\n"; } //匿名名稱空間中的所有東西,都可以在本檔案中被訪問 void h() { std::cout << "h()\n"; g(); } //呼叫本地的g() } int main() { h(); }