static、const、define、inline关键字

来源:互联网 发布:eclipse java neon 编辑:程序博客网 时间:2024/05/06 09:15

1、staic关键字

     凡是用static关键字声明或者定义的变量和函数,均存储在静态存储区,其生存期都是伴随着程序结束而结束。

     静态局部变量: 与普通局部变量相比,作用域一样,存储区域不一样(由堆栈变为静态存储区),生存期不一样。

    静态全局变量: 与一般全局变量相比,存储区一样,生存期一样,作用域变小了(由整个程序到包含其的cpp文件)。

    静态       函数: 与一般全局变量相比,存储区一样,生存期一样,作用域变小了(由整个工程到包含其的cpp文件)。

    类的静态成员变量:它为类的所有对象所共有,在没有产生类对象时其作用域就可见,在没有产生类的实例时,我们就可以操作它;静态数据成员定义时要分配空间,所以不能在类声明中定义。

    类的静态成员函数:它为类的全部服务而不是为某一个类的具体对象服务,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针,不能够访问类的非静态成员。

2、const关键字

    作用:定义常量,修饰函数的参数和返回值

3、define关键字

     c语言中的宏定义,在编译时只是进行简单的文本替换,而不进行数据类型安全检查

4、inline关键字

     好处:避免函数的调用,而是直接将函数代码copy到调用的地方

     坏处:增加代码的体积,增加内存负荷,影响程序运行速度

     一般将需要多次调用并且代码只有10行以内的函数定义为inline函数。

5、register变量

    将(频繁使用的)局部变量的值从内存中放到寄存器(静态局部变量不能定义为register变量)

6、extern变量(与static正好相反,它的作用域为整个工程)

     extern int i;  i = 0;在全局区域时表示定义一个变量,在局部时表示引进外部变量,并给其赋值(赋值语句不应该出现在函数块之外)

     extern用于定义一个变量:extern int i = 0;

7、一个类的例子

class Test{public:Test(): a(0){}  enum {size1=100, size2 = 200 };private:const int a;          // 只能在构造函数初始化列表中初始化,不能在构造函数体里面进行初始化   static int b;const static int c = 0;   //可以在这里定义};int Test::b = 0;         // 不能以成员列表初始化,不能在定义处初始化,因为不属于某个对象,只能在外部初始化。//const int Test::c = 0;   //注意:给静态成员常量赋值时,不在需要加static修饰。但const要加。





原创粉丝点击