Hi,您好,欢迎来到西安盛图软件科技有限公司!

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;
}



以上为本次所有分享内容



上一篇:C++ 存储类型
下一篇:C++ 预处理命令