名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中,默认情况下,在名称空间中声明的名称的链接性为外部的。
使用using编辑质量倒入一个名称空间和使用多个using声明是不一样的。
假设名称空间和声明区域定义了相同的名称,如果试图使用using声明将名称空间的名称导入该声明区域,则这两个名称会发生冲突,从而出错。如果使用using编辑指令将该名称空间的名称导入该声明区域,则局部版本将隐藏名称空间版本。
namespace Jill
{
double bucket(double ){}
double fetch;
struct Hill{int a};
}
char fetch;//全局变量
int main()
{
using namespace Jill;//引入名称空间的全部名称
Hill Thrill; //创建一个变考量类型为:Jill::Hill
double water = bucket(2);
double fetch;//创建一个临时变量,如果有using Jill::fetch声明,着这条语句就错了
cin >>fetch;//输入本地变量
cin>>::fetch;//输入全局变量
cin >>Jill::fetch;
}
iunt foom()
{
Hill top;//错误的
Jill::Hill crest;
}
虽然函数中的using编译指令将名称空间的名称视为在函数之外声明的,但他不会呢使得该文件中的其他函数能够使用这些名称。
C++鼓励程序员在开发程序时用多个文件。一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型;并将函数定义放在一个独立的源代码文件中。头文件和源代码文件 一起定义和实现了用户定义的类型及其使用方式。最后在main()和其他使用这些函数的函数放在第三个文件中。
静态变量在整个程序执行期间都存在,对于在函数外面定义的变量,其所属文件中位于该变量的定义后面的所哟函数都可以使用它(文件作用域),并可在程序的其它文件中使用(外部链接性)。另一个文件要使用这种变量,必须使用extern关键字来声明它。对于文件中共享的变量,应在一个文件中包含其定义(无需使用extern,但如果同时进行初始化,也可以使用它),并在其他文件中包含引用声明(使用extern且不初始化)。在函数外面使用关键字static定义的变量的作用为整个文件,但不能用于其他文件。在代码中使用关键字static定义的变量被限制在改代码块内部(局部作用域、无链接性),但在整个程序执行期间他都一直存在并且一直保存原值。
最后,在C++中把全局变量定义为const则变为文件全局变量。