C/C++中的静态变量和函数

转载 2012年03月24日 12:58:17

   先说说C中的静态变量和静态函数。(1)C中的静态变量是处于全局存储区,区别于自动变量的存储于栈中。两者的关键区别是其作用域的区别。自动变量的作用域处于其所在的函数或语句块中;而静态变量的作用域起始于其定义处,终止于程序结束处。(2)C中的静态函数主要是限制函数的名字以及可访问域于文件中,表示此函数仅供此文件所用,不允许在其他文件中调用的。有关静态函数的使用可以考虑几点:一是静态函数的名字仅可见于其所定义的文件。这就允许在不同的文件中存在同名的静态函数。可以利用此特性将本文件常用的代码抽象出来成为函数,而在使用此段代码的地方直接调用函数即可。这样允许用简短的名词定义此函数。我的体验,在面临定义功能相同的函数是,为他们取一个美丽的名字其实很困难,而在使用上对名字的记忆也颇费苦心。而用静态函数可以省力许多。而普通函数是可以全局访问的,而且在C中没有名字空间的概念,所以对C中函数的命名颇费苦心。

   再说C++中的静态成员变量和静态成员函数。(1)类静态数据成员在编译时创建并初始化:在该类的任何对象建立之前就存在,不属于任何对象,而非静态类成员变量则是属于对象所有的。类静态数据成员只有一个拷贝,为所有此类的对象所共享。特别需要注意的一点是:静态数据成员不能在类中初始化(对于常量静态类变量有待考证,好像可以在类外或main()函数之前定义,初始化可以放在类中),一般在类外和main()函数之前初始化,缺省时初始化为0。静态数据成员用来定义类的各个对象所公有的数据,比全局变量更安全。(2)类静态成员函数属于整个类,不属于某个对象,由该类所有对象共享。静态成员可定义为inline函数。一般情况下静态成员函数用于访问同一类中的静态数据成员或全局变量,而不访问非静态成员,如需访问非静态成员,需要将对象作为参数,通过对象名访问该对象的非静态成员。静态成员函数也可以在类外定义,此时不可以用static修饰。静态成员函数存在的原因是什么呢?主要是在建立任何对象之前可用它来访问静态数据成员,普通函数不能实现此功能。

   C++静态成员和静态成员函数的使用:静态成员的调用格式:类名::静态数据成员名、对象名.静态数据成员名、对象指针->静态数据成员、对象引用.静态数据成员(但类中很少会出现公有数据成员,这段仅仅讨论语法,未考虑实际运用中的数据封装问题)。静态成员函数的调用格式:类名::静态成员函数名、对象名.静态成员函数名、对象指针->静态成员函数名、对象引用.静态数据成员。静态成员函数没有this指针,因它不与特定对象相联系,调用时推荐使用“类名::静态成员函数名”格式。总结来说,在有对象的情况下,可以用调用普通类成员函数、普通成员变量的方式调用静态成员函数和静态成员变量。从这里可以看出静态成员变量和静态成员函数的使用应该是在不建立任何对象的情况下调用它们。其应用可以参见设计模式中Singleton pattern。

c++静态变量,静态函数,私有静态变量的使用小记

自从上了小学才发现,记忆力大不如前了,看来小的时候没有开发出来,导致记忆模块荒凉遍野,现在很多学过,记过,用过的东西,一段时间以后发现除了有些印象外,再无其他,所以正证明那句话:“好记性不如烂笔头”。...
  • lxp116
  • lxp116
  • 2014年02月20日 11:06
  • 4145

C/C++静态变量static详解

静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。     静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。 用法1:函...
  • u014186096
  • u014186096
  • 2015年09月12日 08:07
  • 7396

C++静态构造函数相关概念解析

http://developer.51cto.com/art/201002/181969.htm 如何才能正确的理解C++静态构造函数呢?这一静态函数在实际应用中能对我们起到些什么样的作用呢...
  • mydriverc2
  • mydriverc2
  • 2015年05月25日 10:42
  • 1303

C/C++中全局变量和静态变量的区别

1. 全局变量的作用域是整个程序,它zhi
  • cgl1079743846
  • cgl1079743846
  • 2014年05月28日 22:21
  • 2845

C++静态成员变量和静态成员函数使用总结

C++静态成员变量和静态成员函数使用总结: 一.静态成员变量:          类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员...
  • fanyun_01
  • fanyun_01
  • 2016年05月16日 09:11
  • 7428

VC和gcc在保证函数static变量线程安全性上的区别

VC和gcc不同,不能保证静态变量的线程安全性。这就给我们的程序带来了很大的安全隐患和诸多不便。这一点应该引起我们的重视!尤其是在构造函数耗时比较长的时候,很可能给程序带来意想不到的结果。本文从测试代...
  • yichigo
  • yichigo
  • 2014年07月16日 15:10
  • 1411

C/C++面试题:static(静态)变量的作用

C /:  static 的作用:         (1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数被调用的过程中其值维持不变         (2...
  • qq_26626709
  • qq_26626709
  • 2016年07月21日 17:54
  • 1111

C++类中静态变量和静态方法的注意事项

一 静态变量 1、静态变量必须在外部定义和赋值 a、不能在 main() 函数中定义 b、不能在类的构造函数中定义 2、必须要定义静态变量,否则该变量没有内存空间(类中只是申明)...
  • nwd0729
  • nwd0729
  • 2015年07月26日 13:51
  • 2698

C和C++中全局变量,局部变量,静态变量和常量

C/C++中常量,静态变量,全局变量和局部变量的区别和作用。把局部变量改变为静态局部变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态全局变量是改变了它的作用域, 限制了它的使用范围。...
  • zcyzsy
  • zcyzsy
  • 2016年08月14日 22:54
  • 1648

再探私有/公有静态成员变量与私有静态成员方法

问题1: 为什么在类内的静态成员定义后,要到类的外部在定义和初始化? 问题2:为什么类的静态成员在类外部的定义只能一次? 问题3:私有的静态成员变量如何初始化,访问权限还是私有么? 问题4:在程序执行...
  • tianjian789
  • tianjian789
  • 2015年09月06日 12:20
  • 1981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++中的静态变量和函数
举报原因:
原因补充:

(最多只允许输入30个字)