static性质

总结一下static在C/C++中的作用。

https://blog.csdn.net/weixin_41143631/article/details/81221512参考我的这篇笔记。

static 变量 未初始化就放在 BSS segment ,已初始化的 就放在 Data segment,但可以认为BSS或Data段都是静态区。

C++中可以认为是一块区域。

明白一个变量的存储区域便可以很好理解其使用性质。

 

 static类型分配在静态存储区,在程序整个运行期间都不释放,这是其作用。

知识点A: 存储在静态数据区的变量会在程序刚开始运行时就完成初 始化,也是唯一的一次初始化。这也是实现单例模式的一个诀窍,巧妙运用静态数据区的性质。

知识点B:静态数据区的变量只在定义它的源文件内有效,其他源文件无法访问它。作用域应该是声明这个变量的CPP 或C 文件,其他文件无法使用。(不推荐在头文件中定义,因为包含头文件实际是copy所有头文件内容,会导致重复定义)

class A {
public:
	int a;
	static int b;
};


//主函数
	A classa;
	printf("%d\n", sizeof(classa));
	classa.b = 20;
	cout << classa.b << endl;
	A class_b;
	cout << class_b.b << endl;

显然会classa的大小只会为4。且对b赋值会影响所有实例。 会打印  4,20,20.

知识点C:static静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化。

static变量是属于类的,而不是对象的。

总体而言性质和常量区大同小异,常量区存储全局变量和const修饰的。

 const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。这和static有所区别。

    const char *s1 = "hello, world";
    const char *s2 = "hello, world";

s1,s2存储的地址其实是同一个,这也是因为hello,world存储常量区。

const定义的常量在超出其作用域之后其空间会被释放

extern全局变量存储在静态区。

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 - 程序结束后由系统释放。

顺便一提,C语言中还有关键字register使变量直接存储于寄存器。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值