zoukankan      html  css  js  c++  java
  • static

    static第一个作用:限制变量或函数作用域

    当我们在全局变量或者函数前面不加static时,那我们的全局变量或者函数是外可见的,不同的文件之间是可以互相访问的。但是当我们加上static关键字以后不同文件之间我们的函数和全局变量是隐藏的。这样做的好处是:可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.

     static第二个作用:保持变量的持久

    一般我们的局部变量是存储在栈上,当函数结束,变量也随之结束被释放。而静态局部变量和全局变量一样存储于进程的全局数据区,虽然函数结束后他无法被使用,但即使函数返回,它的值也会保持不变。他跟全局变量相比因为位于函数内,更加便于维护。注意:存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

     1 #include <stdio.h>
     2 //因为C++的函数如果main要调用要写在前面或者需要在main里面申明
     3 void func_one()
     4 {
     5     int    ex = 5;
     6     printf("func_one_ex = %d
    
    ",ex);
     7     ex++;
     8     printf("func_one_ex++ = %d
    
    ",ex);
     9 }
    10 
    11 void func_two()
    12 {
    13     static int ex = 5;
    14     printf("func_two_ex = %d
    
    ",ex);
    15     ex++;
    16     printf("func_two_ex++ = %d
    
    ",ex);
    17 }
    18 
    19 int main()
    20 {
    21     //第一次运行
    22     func_one();
    23     func_two();
    24     //第二次运行
    25     func_one();
    26     func_two();
    27 }
     1 func_one_ex = 5
     2 
     3 func_one_ex++ = 6
     4 
     5 func_two_ex = 5
     6 
     7 func_two_ex++ = 6
     8 
     9 
    10 
    11 func_one_ex = 5
    12 
    13 func_one_ex++ = 6
    14 
    15 func_two_ex = 6
    16 
    17 func_two_ex++ = 7

    通过上面的代码我们看到两个函数第一次运行的时候ex都被初始化了,但第二次运行的static的变量并没有被初始化且保持了原来的值。

    类成员声明static

    1、静态成员函数没有this指针,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数;非静态成员函数可以任意地访问静态成员函数和静态数据成员;

    2、由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

    3、调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式<类名>::<静态成员函数名>调用类的静态成员函数。   

  • 相关阅读:
    Qt初始化窗口大小
    Ignatius's puzzle(数学)
    无法定位程序输入点_Z5qFreePv于动态链接库QtCore4.dll
    Harmonic Number(打表法)
    Codeforces Round #170 (Div. 2) C. Learning Languages(并查集)
    Codeforces Round #174 (Div. 2) B. Cows and Poker Game(简单)
    Codeforces Round #175 (Div. 2) B. Find Marble(简单模拟)
    错误:no matching function for call to 'Ui_***::retranslateUi()'
    最大流EK算法模板(BFS实现)
    Shaking Your Cellphone(并查集)
  • 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/10881908.html
Copyright © 2011-2022 走看看