zoukankan      html  css  js  c++  java
  • static作用

          存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量。

    0x01  (普通)全局变量与静态全局变量 (隐藏)

          未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问全局变量名或者函数名前加static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突

          static全局变量只初始化一次,防止在其他文件中被引用。

    0x02   (普通)局部变量与静态局部变量

          局部变量改为静态变量后是改变了它的存储方式(唯一的一次初始化),即改变了它的生存周期。

          作为static局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

    // StaticDemo.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <stdio.h>
    
    int Function();
    int main(void)
    {
    	for (int i = 0; i <= 10; ++i)
    		printf("%d
    ",Function());
    	return 0;
    }
    
    int Function() {
    	static int StaticNumberUnitOnlyOnce = 666;      //  存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
    	return StaticNumberUnitOnlyOnce--;              //在static出现前,要达到同样的功能,则只能使用全局变量: 
    }

      

    0x03  (普通)函数和静态函数

        未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问,全局变量名或者函数名前加static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

    0x04   C++中的类成员声明static


      静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:

      (1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。      

      (2)不能将静态成员函数定义为虚函数。      

  • 相关阅读:
    廖雪峰的多线程 1
    保持良好的心态 戒骄戒躁
    Break camelCase
    int32 to IPv4 (int32到IPv4地址转换)
    Stop gninnipS My sdroW!
    Find The Parity Outlier 找到奇偶校验异常值
    今日新闻整理 2020-7-31
    改造rabbitmq demo 到 jpa
    Flink实战(110):FLINK-SQL应用场景(11)connector(十九)Flink 与 hive 结合使用(七) Flink Hive Connector 使用
    Hadoop基础(六十):面试题 Hadoop数据切片(二)切片机制源码
  • 原文地址:https://www.cnblogs.com/lsh123/p/7851244.html
Copyright © 2011-2022 走看看