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/C++ 变量声明和定义的区别 静态变量的作用

变量声明和定义的区别 :在学习C/C++的过程中容易混淆变量的声明和定义,先将他们的区别总结如下:

C/C++静态变量

(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。   (2)静态局部变量的生存期虽然为整个源程序...

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

类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。  静态类成员包括静态数据成员和静态函数成员两部分。  一 静态数据成...
  • ufe_1
  • ufe_1
  • 2012-09-14 10:57
  • 186

(JNI)C/C++ 访问 Java 实例变量和静态变量

实例变量和静态变量 在上一章中我们学习到了如何在本地代码中访问任意 Java 类中的静态方法和实例方法,本章我们也通过一个示例来学习 Java 中的实例变量和静态变量,在本地代码中如何来访问和修...

C/C++ 访问 Java 实例变量和静态变量

实例变量和静态变量 在上一章中我们学习到了如何在本地代码中访问任意 Java 类中的静态方法和实例方法,本章我们也通过一个示例来学习 Java 中的实例变量和静态变量,在本地代码中如何来访问和修改。...

JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量

在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也通过一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问。静态变量也称为类变量(属性),在所有...

C++ 类中的静态变量和静态成员函数(转)

静态数据成员: 下面看一个例子:  #include class Point { public: void output() { } static void init() {...

C++静态变量和静态函数的小结

C++静态变量和静态函数的小结 最近由于工作的关系,要做一个简单的输入法,当然是要移植到arm板上去的。没有想自己做,就到网上找到两个用Qt输入法打代码,自己整合了一下,最后的效果差强人意吧!在...

C++类的静态变量成员和静态成员函数的使用

1  类的静态成员变量 当类的一个成员变量被声明为static类型时,该成员变量就是类的静态变量,属于类的所有实例。也就是说类的静态变量是类的所有该类实例的全局变量。   静态成员变量的初始化,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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