zoukankan      html  css  js  c++  java
  • 50、static的用法和作用?

    1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)

    当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

    2.static的第二个作用是保持变量内容的持久。

    (static变量中的记忆功能和全局生存期)存储在静态数 据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存 储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底 static还是用来隐藏的。

    3.static的第三个作用是默认初始化为0(static变量)

    其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。

    4.static的第四个作用:C++中的类成员声明static

    1) 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其 值在下次调用时仍维持上次的值;

    2) 在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

    3) 在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模 块内;

    4) 在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

    5) 在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

    类内:

    6) static类对象必须要在类外进行初始化,static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化;

    7) 由于static修饰的类成员属于类,不属于对象,因此static类成员函数是没有this指针的,this指针是指向本对象的指针。正因为没有this指针,所以static类成员函数不能访问非static的类成员,只能访问 static修饰的类成员;

    8) static成员函数不能被virtual修饰,static成员不属于任何对象或实例,所以加上virtual没有任何实际意义;静态成员函数没有this指针,虚函数的实现是为每一个对象分配一个vptr指针,而vptr是通过this 指针调用的,所以不能为virtual;虚函数的调用关系,this->vptr->ctable->virtual function

    51、静态变量什么时候初始化

    1) 初始化只有一次,但是可以多次赋值,在主程序之前,编译器已经为其分配好了内存。

    2) 静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配 好了内存,但在C和C++中静态局部变量的初始化节点又有点不太一样。在C中,初始化发生在代码执行 之前,编译阶段分配好内存之后,就会进行初始化,所以我们看到在C语言中无法使用变量对静态局部 变量进行初始化,在程序运行结束,变量所处的全局内存会被全部回收。

    3) 而在C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始 化必须执行相应构造函数和析构函数,在构造函数或析构函数中经常会需要进行某些程序中需要进行的 特定操作,并非简单地分配内存。所以C++标准定为全局或静态对象是有首次用到时才会进行构造,并 通过atexit()来管理。在程序结束,按照构造顺序反方向进行逐个析构。所以在C++中是可以使用变量对 静态局部变量进行初始化的。

  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/crbhf/p/14966694.html
Copyright © 2011-2022 走看看