C++进阶--命名空间和关键字using

时间:2021-12-08 20:00:58
//############################################################################ /* * 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(); }