博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++ static总结
阅读量:4347 次
发布时间:2019-06-07

本文共 1698 字,大约阅读时间需要 5 分钟。

    前行的路上你是否孤单过,穿梭在这个城市,累了吗,醒了吗,醒了就继续前行吧。

 一、

   1、static的第一个作用是隐藏:当我们要编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。当在全局变量和函数前加上“static”前缀后,就会对其他源文件隐藏。利用这一个特征可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。 

  2、static的第二个作用是默认初始化为0,包括未初始化的全局静态变量与局部静态变量。在C语言中,未初始化的静态变量(全局/局部)放在内存的BSS段,而初始化了的放在内存的数据段。其实,全局变量即使不定义为静态,也是会自动被初始化的;而局部变量则不同----局部变量如果是内置类型则不会被初始化,注意,如果只被初始化了一部分,那么其后面的部分将会被初始化为0;如果变量不是内置类型,则不管其在哪定义,都会自动调用其默认构造函数进行初始化。这样讲也许还不会清楚,来看下面的例子:

static int a;int b;string s1[10];int main(){static int c;int d; string s2[10];return 0;}

  a、b和c被初始化为0;d为函数体内定义的内置类型,元素未被初始化,值不确定; s1和s2为元素类型string的数组,自动调用string类的默认构造函数将各个元素初始化为空字符串;

3、static的第三个作用是保持局部变量内容的持久

     不加static前缀的变量,会跟随函数生存期的结束而结束,但是带有static前缀的变量不会;静态局部变量的生存周期虽然为整个源程序,但其作用域仍与局部变量相同,即只能在定义改变量的函数内使用该变量;

 

二、类中的static的作用

    c++重用了static这个关键字,并赋予它与前面不同的含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数;

    1、静态数据成员

        静态数据成员和普通数据成员一样遵守public,protected,private访问规则。静态数据成员只和类关联,而不和特定的对象关联。静态数据成员也存储在全局存储区;静态数据成员定义时要分配空间,所以不能在类声明中定义。static数据成员必须在类定义体的外部定义。

       下面来举个例子吧,例子是之前在百度百科中看到的,理解起来也好理解的;看下面

       

#include 
class Myclass{public:Myclass(int a,int b,int c);void GetSum();private:int a,b,c;static int Sum;//声明静态数据成员};int Myclass::Sum=0;//静态数据成员的初始化Myclass::Myclass(int a,int b,int c){this->a=a;this->b=b;this->c=c;Sum+=a+b+c;}void Myclass::GetSum(){cout<<"Sum="<
<

 

 输出结果是:

   Sum=6

   Sum=21

   Sum=21

   第一个输出结果是对象M成员和,第二个和第三个输出结果是对象M和N的和,可以看出对象M和N公用了静态数据成员Sum;

 

    2、静态成员函数

        静态成员函数的特点:

         (1)、静态成员函数和普通成员函数相比较,普通的成员函数都隐含着一个this指针,而静态成员函数不包含这个this指针,所以静态成员函数无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数。它只能调用其它的静态数据成员和静态成员函数。

         (2)、静态成员函数只能访问其它的静态成员函数和静态数据成员,而不能访问非静态数据成员和非静态成员函数。但是非静态成员函数可以访问静态成员函数和静态数据成员。

         (3)、由于没有this指针的额外开销,所以静态成员函数相比与类的非静态成员函数速度上会有少许的增长。

转载于:https://www.cnblogs.com/nobbyoucanyouup/p/4613014.html

你可能感兴趣的文章
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>
万方数据知识平台 TFHpple +Xpath解析
查看>>
Hive实现oracle的Minus函数
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
RocketMQ配置
查看>>
关于typedef的用法总结(转)
查看>>
Linux下安装rabbitmq
查看>>
【转】判断点在多边形内(matlab)
查看>>
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
查看>>
机器码和字节码
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>