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