C++進階--命名空間和關鍵字using


//############################################################################
/*
 * 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();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM