作用域及auto、static、const、extern的用法和区别

来源:互联网 发布:安卓纪元 矩阵潜袭 编辑:程序博客网 时间:2024/06/05 15:45

一、作用域

   作用域是一个标识符在程序正文中有效的区域。

1)函数原型作用域

  在函数原型声明时形式参数的作用范围就是函数原型作用域。例如:

 int F(int x);

     标识符x的有效范围是小括号里面,这是C++程序最小的作用域,此时x可省略,但为了程序的可读性,最好不要省略。

2)局部作用域

如上图,函数形参列表中形参(例如x)的作用域为形参的声明处到函数体结束之处,函数里面的变量的作用域也是从变量声明处到所在块结束处。

3)类作用域

若i是类A的成员,i的作用域包括整个类,还可以通过类A的对象a或指针*a访问i;

4)命名空间作用域

在命名空间里面的标识符的作用域从其声明处到命名空间结束处以及包含此命名空间的模块,例如cout是命名空间std的标识符要使用它可以通过下面两种方式:

using namespace std;

using std::cout;

二 四个修饰符

1)auto(C++11)

由字义易知这是起到自动类型判断的作用的修饰符,当你不知道数据类型时(使用模板技术时)就可以用这个,例如:

  auto a = 10;  
     auto c = 'A';  
     auto s();//函数返回值为auto
要注意的是:
1.用auto声明的变量必须初始化
2.模板和函数参数类型不能为auto
3.auto不能与其他数据类型连用

2)static
1.static表示静态,用static声明的变量(静态变量)只会初始化一遍,以后都会保存改变的值(静态生存期);例如
for(inti= 0;i<10;i++)

  static int n=1;
        n++;
循环完后n的值不是2而是11。
2.static有隐藏的功能,它会使修饰的变量的作用域变为本模块,其他模块不可见,如上图的代码,在for循环外面n就不可见;
3.static和全局变量默认初始化为零;
4.静态数据成员和静态函数成员:在c++类中,有些数据或操作是为整个类共有的,而不是属于对象的,比如Point类中计算点的个数,这时就可以用static修饰来达到上述目的

3)extern
和static作用相反,extern的作用就是使一个标识符在其他文件或模块可见(在该处能引用标识符),extern也有静态生存期,要注意的是用extern修饰的变量要在另一个文件或模块定义。
4)const
const表示只读的意思,用const修饰后就变成了一个常量(不能被改变其状态),可以数据的安全性。相应的有常函数,常函数。具体运用时要注意:
1.type const *a或const type *a            表示a为指向常量的指针
2.type *const a                 表示a是一个常指针,指针本身的值(地址)不变
3.const type *const a           表示a是一个指向常量的常指针



0 0
原创粉丝点击