c/c++ static

static修饰变量初始化

 static修饰的变量未初始化,会被放到bss段,自动初始化为0。并且static 修改的变量初始化语句只执行一次,并不会多次执行。
 static 修饰变量,会影响变量的生命周期,因为被数据被加载到了 静态全局区,所以生命周期随程序。并且链接属性变为local,无法被其他源文件链接

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 4096*4096

void Fun()
{
  static int i = 1;
  printf("第%d次\n",i++);
}
int main()
{
  Fun();
  Fun();
  Fun();
  Fun();
  Fun();
  Fun();
  Fun();
  Fun();
  return 0;
}
打印结果
第1次
第2次
第3次
第4次
第5次
第6次
第7次
第8
类内static 修饰

  类内static修饰只会改变该符号的访问方式,也就是该成员属于整个类,而不是类的对象,并且经static修饰后的成员函数没有了隐含this指针这个参数,那么它的内部是不能访问非静态成员函数和非静态成员变量的,相反非静态成员函数可以访问静态成员函数。

总结
  1. static关键词仅与静态成员的在类定义中的声明一起使用,不与静态成员的定义一起使用
  2. 类体内的声明不是定义,可以拥有不完整类型
  3. 类内static函数无隐含this指针选项
  4. 静态成员函数不能被 const volatile virtual修饰 (因为没有this指针)
  5. 常量静态成员变量(const 修饰的成员变量)必须在类内初始化
  6. 静态成员的链接属性跟类的链接属性相同,如果类在匿名命名空间内则类链接属性变为局部,静态成员的链接属性变为局部。否则,如果类在全局作用域内,类的链接属性是全局的那么类的静态成员链接属性也是全局的。
  7. 写在全局作用域内的非ADT类型的内置类型其链接属性被改为local,静态的内置变量生命周期改为静态全局区。(这条也就是static在C语言中的应用)

变量命名

 变量命名的时候不要用 i , j ,k ,最好用可以表述其意义的英文。并且如果在 vim 下 我们使用 i , j ,k 的时候。如果进行底行模式下的替换,举列子如果把 i 替换成 xxx , 那么这样不至i ,所有包括 i 的单词都会被替换,size_t 就会被替换成 sxxxze_t 这样还是比较坑的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值