C++辨析系列谈(一)

原创 2001年05月09日 10:38:00
C++辨析系列谈(一)
 郑力群
  static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。

static 的两大作用:

一、控制存储方式

  static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。

  1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?
最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。

  2、 解决方案:因此C++ 中引入了static,用它来修饰变量,它能够指示编译器将此变量在程序的静态存储区分配空间保存,这样即实现了目的,又使得此变量的存取范围不变。

二、控制可见性与连接类型 :

  static还有一个作用,它会把变量的可见范围限制在编译单元中,使它成为一个内部连接,这时,它的反义词为”extern”.

  Static作用分析总结:static总是使得变量或对象的存储形式变成静态存储,连接方式变成内部连接,对于局部变量(已经是内部连接了),它仅改变其存储方式;对于全局变量(已经是静态存储了),它仅改变其连接类型。

类中的static成员:

一、出现原因及作用:

  1、需要在一个类的各个对象间交互,即需要一个数据对象为整个类而非某个对象服务。

  2、同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见。

  类的static成员满足了上述的要求,因为它具有如下特征:有独立的存储区,属于整个类。

二、注意:

  1、对于静态的数据成员,连接器会保证它拥有一个单一的外部定义。静态数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了。消除时的顺序是初始化的反顺序。

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

【英语】-吞音与连读

我们都学习过或在学习英语,英语不只书面上的字,它还需要我们用嘴将他们表达出来。每次看到别人流利的说英语都是一脸羡慕,跟读英语的人应该都会遇到跟不上视频的速度,明明读的很快了,却怎么也跟不上呢?这就是我...
  • q290994
  • q290994
  • 2017年02月11日 18:34
  • 637

C++各种指针辨析

1)int *p p与*结合,表明p是一个指针 然后前面int说明p是一个整形的指针 2)int *p[n] 因为[]比*优先级高,所以p先与[]结合,表明p是个数组,然后这个数组在...
  • u013524455
  • u013524455
  • 2014年01月20日 15:47
  • 936

C/C++常见概念辨析

1. 指针 int (*p)[5]  指针,指向含5个元素数组 int *p[5]  数组,长度为5,数组中每一个元素指向一个整型变量。 int *f( int i, int j)和 int (...
  • himilong
  • himilong
  • 2015年10月18日 23:14
  • 500

使用CodeBlock编译一个C++程序

转自: http://blog.csdn.net/sinat_27088253/article/details/52137855 http://jingyan.baidu.com/article/0b...
  • qq_22122811
  • qq_22122811
  • 2017年04月05日 20:23
  • 1607

C++中static extern关键字及全局变量的辨析

全局变量,就是指那些定义在函数或类之外的变量,它可作为多个类或函数都需要共同使用的变量。(1)全局变量会被自动初始化,函数中的变量不会被自动初始化,类中定义的那些成员变量(内建)也不会自动初始化。那么...
  • u010893262
  • u010893262
  • 2016年09月17日 15:31
  • 102

C++ 类继承中static成员的辨析

首先明确static的相关知识点: 知识点1:静态变量并不是说其就不能改变值,不能改变值的量叫常量(即const), 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月23日 09:32
  • 528

c、 c++、 java 基本数据类型 对比辨析

c、 c++、 java 基本数据类型 对比辨析 一、java      1.数据类型表 二、C++      1.数据类型表 一、C      1.数据类型表...
  • Scotfield_msn
  • Scotfield_msn
  • 2016年09月19日 22:25
  • 426

辨析C++中头文件的命名方式

C++标准库很大。非常大。难以置信的大。怎么个大法?这么说吧:在 C++ 标准中,关于标准库的规格说明占了密密麻麻 300 多页,这还不包括标准 C 库, 后者只是"作为参考"(老实说,原文就是用...
  • tongxinhaonan
  • tongxinhaonan
  • 2014年04月22日 15:17
  • 381

C++ const与指针之间组合的辨析

const与指针之间相互组合的辨析 1:如果一个对象被声明为const,变成了常量那么也只能使用指向常量的指针来存放常量的地址。但是,指向常量的指针并没有规定其所指对象必须为常量。所以,指向常量的指针...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月25日 09:30
  • 457

辨析c++的常量指针、指针常量,引用

本篇博文主要记录近日学习的常量指针、指针常量和引用
  • gxz144654426
  • gxz144654426
  • 2018年01月01日 20:50
  • 25
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++辨析系列谈(一)
举报原因:
原因补充:

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