一. 全局变量和局部变量
全局变量:作用在全局。
局部变量:作用于局部。
在访问时,有就近原则。
在函数内,有局部变量是就近原则,先访问局部变量
若要访问全局变量使用 ::,::+变量名,
若有命名空间则使用 命名空间名+::+变量名
namespace Maker{
int c = 30;
}
int mya = 10; //全局变量
int mian(){
int mya = 20;//局部变量
//就近原则
cout<<"mya"<<mya<<endl; //输出为20
//用::输出全局变量
cout<<"::mya"<<::mya<<endl; //输出为10,输出全局变量
cout<<"Maker::c"<<::c<<endl //输出为全局变量c ,30
}
二.命名空间可以嵌套
在输出嵌套命名空间全局变量时,使用 外命名空间名+::+内空间名+::+变量名
namespace Maker{
int a;
namespace B{
int b;
}
}
int main(){
cout<<"Maker::B::b"<<Maker::B::b<<endl
}
三.匿名的命名空间
可以直接用
但注意在开发过程中,如果匿名的话,别人无法使用和开发
如同static int a = 50;静态的
匿名只能在本文件里使用,其他的文件无法使用
namespace {
int d = 50;
}
int main(){
cout<<"d"<<d<<endl;
}
四.命名空间可以取别名
在多人开发过程中可能会出现你取的名字和别人取得名字相同,所以这时候可以取个别名
namespace Maker{
int a = 30;
}
int main(){
// 取别名
// 新名字 旧名字
namespace newMaker = Maker
cout<<"newMaker::a"<<newMaker::a<<endl;
}
五.分文件编写代码时
5.1 头文件 .h和源文件.cpp的作用取别
头文件:.h的作用是声明函数
源文件:.cpp的作用是实现函数
在这里我们发现在同一个.h头文件里,有两个相同的函数func()但也没有报错,因为命名空间不同
在.cpp应用时。则需要带有命名空间名,在.cpp文件使用myMaker1::func()来访问函数,但是报错,报错的原因是,在写func函数的实现的时候没有写作用域
当出现无法解析外部命令的这个错误时表示是在链接的这个步骤出错了
所以需要在实现func函数时带上作用域::和命名空间名
5.1.1 在代码变为一个可执行程序分四部
1. 预处理
2. 编译
3. 汇编
4. 链接
5.1.2 作用域运算符
::的作用 标识出函数的作用域,如命名空间,全局变量等。