c++作用域及命名空间
C++作用域
什么是作用域
每一个变量、函数、数组、结构体、类、等实体都有其自己有效的作用范围,这就是变量的作用域。在局部变量中,局部变量只在定义的函数范围内有效;即从变量定义开始到函数结束被释放。
int fun()
{
int a; //a的作用域开始
……
……
} //a的作用域结束
在全局变量中,全局变量的作用域为从定义变量的位置开始到本源文件结束。
若全局变量与局部变量重名,则在局部变量作用域中优先使用局部变量;
若想在局部变量作用域中使用全局变量需要使用作用域限定符(::)
#include<iostream>
using namespace std;
int a = 1; //全局变量a的作用域开始
void fun();
int main()
{
int a = 2; //局部变量a的作用域开始
fun();
cout << a <<endl; //在局部变量作用域中优先使用局部变量
cout << ::a <<endl; //限定使用全局变量
return 0;
} //主函数结束局部变量a作用域结束;本源文件结束,全局变量a的作用域结束
void fun()
{
cout << a <<endl;
}
C++命名空间简述
什么是命名空间:
命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。
命名空间的作用
建立多个相互分割的作用域,把实体进行分隔,以免名字冲突。
访问作用域内实体
利用作用域限定符访问作用域内实体;
表达式:
命名空间名::命名空间成员名;
#include <iostream>
using namespace std;
namespace Bird
{
void Show()
{
cout << "Bird" << endl;
}
}
namespace Person
{
void Show()
{
cout << "Person" << endl;
}
}
int main()
{
Bird::Show();
Person::Show();
system("pause");
return 0;
}
4.标准命名空间std
C++标准库所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件中函数、类和对象模板是在命名空间std中定义的;
因此为了减少::的使用可以在文件开头加入 using namespace std;