C++的各类变量

extern,static,const的具体分析。

extern:


extern后加变量,或者函数,都是声明符号在其他地方已声明或定义,需要去其他地方寻找这些声明。


如 

int n;
int N(){
retrun n;
}

如果写在函数中,则为函数内的局部变量,如果写在类中,则为类内的局部变量。若其写在外侧,也就是不包含在任何类或者函数中时,说明它就是一个全局变量,这时,它在编译时,会出现在导出符号表中,而其他的cpp中若再次声明,则为重声明错误。要在其他cpp中使用则要先声明

extern int n;
extern int N();

这里的extern告诉编译器,这里是引用一个外部变量,让链接器去其他cpp中寻找n这个符号。


extern 还可以用extern "C" 来表明接下来的一段内容是用c的规则去编译。如:

extern "C" {
#include "XX.h"
}
extern "C" int plus(int p){
	return ++p;
}


static:

static声明变量是一个静态变量。变量分为全局变量,静态全局变量,局部变量,和静态局部变量。只有非静态的局部变量保存在动态储存区,其他都储存在静态储存区

对于静态的外部变量:

只能在本文件中使用,其他文件中无法使用。本文件指的是对应的头文件和cpp文件,显然,头文件编译时是直接粘贴到cpp中include处的,这个概念要理解啊。

对于函数的静态变量:

函数中的局部静态变量,由于存储在静态储存区,在函数调用结束后,内存不会释放,所以它的值会保留上一次函数调用的结果。静态局部变量不能被其他函数所调用,其作用域只在函数中。

对于类中的静态变量:

类内的静态变量是属于类的,不属于对象,类内只有常量可以同时定义声明,又静态变量也不能在构造函数上定义,所以,一般在cpp文件中这样定义:

class aClass{
static int aa;
};
int aClass::aa=5;

这里不用static也不能再用static。若未对类内静态变量初始化,则其值为0.

const:

常量都储存于静态储存区。

外部的常量:

可以直接在头文件同时进行声明和定义,也可以只在头文件中声明,在cpp中定义

const int cs=0;
extern const int sc;

const int sc=5;

对于类内的常量:

由于也不能直接在类内声明时同时定义,所以一般在使用构造函数时,使用参数初始化列表来进行初始化:

class bClass{
const int constint;
bClass():constint(5){};
};



对于const static 和static const

两个其实是相同的。

定义外部的静态常量时,可以直接初始化,也可以在cpp中进行初始化:

const static int cs=0;
extern const int sc;

 static const int sc=5;

在类内,就可以直接初始化了

class bClass{
const static int cs=0;
static const int sc=1;
};


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值