1.名词
声明区域:可以在其中进行声明的区域
潜在作用域:从声明点开始,到声明区域结尾
作用域:变量对程序而言可见的范围
如下图所示,可以看出各个变量的不同作用域。
2.using声明
1.如下代码中,使用using Jill::fetch可以将fetch添加到局部声明区域中,这会使全局变量fetch失效,所以最后输出的结果是9.
namespace Jill{
double bucket(double n) { return 1; }
double fetch = 9;
struct Hill {};
}
int fetch = 8;
int main()
{
using Jill::fetch;
cout << fetch;
}
tip:
1)namespace 不可以定义在代码段中,意味着不可以放在main函数中
2)不可以同时
using Jill::fetch;
using Jack::fetch;
会报错,使fetch有两个含义;
3)使用using::fetch相当于定义一个局部变量,不能再在该代码段中定义同名变量:
如下所示,定义double fetch会报错
int main()
{
using Jill::fetch;
double fetch; # 报错
cin >> fetch;
cout << fetch;
}
4)多使用 using std::cin 而不是using namespace std
2.如果多名称相互嵌套,可以使用 如下命名方式来简化这种嵌套
namespace elements{
namespace fire {
char flame;
}
char water;
}
char fetch;
int main()
{
cin >> elements::fire::flame;
namespace hot_fire = elements::fire;
cin >> hot_fire::flame;
}
3.不定义名称,用作静态全局变量,将链接性转为内部。
namespace{
int ice;
}
static int ice;
4.在名称空间中声明的函数名的作用域为整个名称空间,因此定义和声明必须位于同一个名称空间中,这正是名称空间的开放性发挥作用的地方。