Skip to main content

Scope

  • 标识符的作用域越小,访问的优先级别越高
  • 单目运算符 :: 可访问全局符号 e.g. ::process++ // 自加全局变量 process

面向过程

  • 作用于表达式内
  • 作用于函数内
  • 作用于程序文件内
  • 作用于整个程序

面向对象

  • 作用于函数成员
  • 作用于类/派生类
  • 作用于基类
  • 作用于虚基类

命名空间

  • 指定一个完全的命名空间时, 不会将任何标识符加入当前作用域. 可重新定义同名局部符号
namespace A {
int a = 0;
namespace B {
int a = 0;
}
namespace C {

}
namespace D {

}
using namespace B;
using namespace C;
}

using namespace A;
int a = 5; ///< Right: 全局变量 a 与 A中的a 同名
  • 指定一个命名空间的具体成员时, 会将成员符号加入当前作用域
namespace A {
float a = 0,
b = 0;
float d(float y) {
return y;
}
}

namespace B {
void g(void) {
cout<<"B\n";
}
}

int main(void) {
using A::a;
using A::d;
using B::g;

long a = 1; ///< Error: a 已被加入当前 main 函数作用域(A::a), 不可重复定义
a = d(2.1); ///< Right: A::a = A::d(2.1);

return 0;
}
  • 可以为嵌套命名空间定义别名
namespace A {
namespace B {
namespace C {
int k = 4;
}
}
}

namespace ABCD = A::B::C;

using ABCD::k; ///< refer to A::B::C::k