zoukankan      html  css  js  c++  java
  • C++ Static

    前言

    今天看到static关键字,对其朦朦胧胧的,所以专门查找了一下相关的定义和说明来深入理解
    参考文章 : C/C++中STATIC用法总结

    使用Static的作用主要有两种:

    1. 第一个作用是限定作用域
    2. 第二个作用是保持变量内容持久化

    c中static的用法:

    1. 全局静态变量

    用法: 在全局变量前加上关键字static,全局变量就定义成一个全局的静态变量。
    内存中的位置:静态存储区,整个程序运行过程中一直存在
    作用域:全局静态变量在声明它的文件之外是不可见的,也就是说作用在声明所在的文件中

    2. 局部静态变量

    在局部变量之前加上关键字static,局部变量就成为一个局部静态变量
    内存中的位置:静态存储区
    初始化:未经过初始化的全局静态局部变量会自动初始化为0
    作用域:作用域仍然为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。当局部静态变量离开作用域之后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能对它进行访问,之道函数再次调用的时候,值依然保持不变。

    C++中static的用法

    类的静态成员

    class A
    {
    private:
        static int value;
    }

    在Cpp中必须对静态变量进行初始化,

    初始化时,使用作用域运算符来标明其所属的类,其属于所有成员共有,只有一个拷贝。

    类的静态函数

    class A
    {
    private:
        static int func(int x);
    }

    实现的时候也不需要static的修饰,因为static是声明性关键字;
    类的静态函数是该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;
    实际上,他就是增加了类的访问权限的全局函数;

    void  A::func(int);

    静态成员函数可以继承和覆盖,但无法是虚函数;

    只在cpp内有效的全局变量:

    在cpp文件的全局范围内声明:

    static int val = 0;

    这个变量的含义是该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;

    只在cpp内有效的全局函数:

    函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;

    warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;

    智能指针下的static

    这里使用GetMyType()的操作,通过Static的方式来获取智能指针

    测试发现,使用静态变量后,Get的操作都是相同的内容,而且Type只创建了一次。

    由于类中使用了静态变量,所以类只有程序退出的时候才会完全析构。





  • 相关阅读:
    thinkpa R61i安装XP SATA的解决方法
    成都港宏4S店买的日产,送的无牌DVD 和可视倒车品牌是路特仕 80007
    设计模式之:解剖观察者模式
    java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)
    lephone 壁纸(裸婚时代 童佳倩姚笛壁纸)
    C# 让程序自动以管理员身份运行
    项目管理的5大过程组、9大知识域、44个管理流程的映射关系
    Spring Security 中如何让用户名不存在的错误显示出来(用户名不存在显示Bad credentials)
    eclipse老是报ThreadPoolExecutor$Worker.run()
    Unison文件夹同步工具
  • 原文地址:https://www.cnblogs.com/EltonLiang/p/9141036.html
Copyright © 2011-2022 走看看