C++中const,static用法总结

一、const

1、const 变量

const 修饰的对象转换为一个常量,不可被修改。

同一工程中const int val = 8全局常量val只作用在本文件中,即使另一文件用extern const int val声明也不行,需在定义时使用extern const int val = 8其他文件才可extern声明访问。

2、const 指针

int a = 1;

const int *a1;//表示p1指向的 整型不可修改

int const *a2;//同上 ;const都在 * 号的左边

int * const a3 = &a;//表示a3指针不可修改,只能指向a的地址;const在 * 号的右边

3、const 引用

当引用的对象是const对象时,引用也必须是const

const int val = 1024;

const int &refVal = val;

4、const 函数参数

传递过来的参数在函数内不可以改变,与上面修饰变量时的性质一样。

5、const 函数返回值 

形如:

const int * fun1( ){   }

const int fun2( ){   }

(1)指针传递

如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer。因为指针指向的数据是常量不能修改。

(2)值传递

如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。所以,对于值传递来说,加const没有太多意义。

6、const  成员函数和成员变量

成员函数

形如:

class A{

  void  fun(int  x) const {   }

};

(1)const修饰的成员函数,函数体中不能修改任何的成员变量(mutable修饰的变量除外)

(2)const成员函数不能调用非const成员函数,因为非const成员函数可以会修改成员变量

即:不能修改对象的成员变量且不能调用非const函数

成员变量

const成员变量不能在类定义时初始化,只能通过构造函数初始化列表进行。

7、const 类对象

非const对象可以调用const和非const成员函数;const对象只能调用const成员函数,而不能调用非const成员函数

二、static

1、static 全局变量和函数(隐藏功能)

同一工程下,static修饰的全局变量和函数只在本文件中可见,未加static的全局变量和函数在整个工程中可见,但都要提前声明,全局变量声明加extern
2、static 局部变量(生存期长)

函数内的静态局部变量生存期为整个源程序,且只进行一次初始化。

3、static 变量(默认初始化为0)

未初始化的全局静态变量和局部静态变量其默认值为0。全局静态变量、局部静态变量和未初始化的全局变量存放在BSS段。

4、static 成员变量和成员函数

static成员变量和成员函数 属于一个类,而不属于此类的任何特定对象。

static静态成员变量不能在类的内部初始化。在类的内部只能声明且要加static,定义必须在类的外部且不能加static。

const static(同static const)成员变量可以在类的定义体中初始化,但定义仍在外面,只不过可以不赋初值。

static静态成员函数只能调用 静态成员函数和静态成员对象。且静态成员函数不能声明为const,virtual,volatile。

 

全局变量、文件域的静态变量和类的静态成员变量在main执行之前的静态初始化过程中分配内存并初始化;局部静态变量(一般为函数内的静态变量)在第一次使用时分配内存并初始化。这里的变量包含内置数据类型和自定义类型的对象。

posted @ 2018-08-04 21:59  鱼非子  阅读(2122)  评论(0编辑  收藏  举报