C++ 作用域及命名空间
发布时间:2023-12-05 13:39:15
变量仅在创建区域内可用。这称为作用域(scope)。本主主要介绍一下C++中的作用域(scope)及命名空间。
1、局部变量
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
例如,
#include <iostream>
using namespace std;
int fn(int a){
int b,c; //a,b,c仅在函数fn()内有效
return a+b+c;
}
int main(){
int m,n; //m,n仅在函数main()内有效
return 0;
}
2、全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .cpp
和 .h
文件。
例如,
#include <iostream>
using namespace std;
int a, b=3; //全局变量
void fn(){
cout << a << endl << b << endl;
}
int main(){
fn();
cout << a << endl << b << endl;
return 0;
}
3、局部变量与全局变量的区别
1)局部变量是声明在块或者函数内部的变量。局部变量的作用域局限于该块或者函数。局部变量如果没有初始化,将包含垃圾数据。
2)全局变量是在所有块和函数之前声明的变量。全局变量对所有在它之后声明的函数有效。全局变量有默认值初始化,如0
。
注意:如果要调用另外一个文件中的全局变量,如果再声明一个同名的全局变量,那么编译器会因为重名报错,这个时候就要使用extern
变量。extern
声明告诉编译器这个变量的定义在其他文件中,所以并不会为它分配内存。
4、静态局部变量和静态全局变量区别
1)非静态全局变量的作用域是整个源程序 ,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2)静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
5、C++命名空间
命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。可以建立多个相互分割的作用域,把实体进行分隔,以免名字冲突。
1)访问命名空间中作用域内实体
命名空间名::命名空间成员名;
2)标准命名空间std
C++标准库所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件中函数、类和对象模板是在命名空间std
中定义的。可以在文件开头加入 using namespace std;
使用时就可以不写std::
。
使用示例:
#include <iostream>
using namespace std;
namespace Animal
{
void Show()
{
//如果上面没using namespace std; 则使用cout需要std::cout
cout << "Animal" << endl;
}
}
namespace Person
{
void Show()
{
//如果上面没using namespace std; 则使用cout需要std::cout
cout << "Person" << endl;
}
}
int main()
{
Animal::Show();
Person::Show();
return 0;
}
以上为本次所有分享内容