码迷,mamicode.com
首页 > 编程语言 > 详细

C++变量

时间:2015-09-30 20:48:13      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

一.确保变量的初始化

定义一个变量,int x;

在某些语境下x会初始化为0,但在其他语境下却无法保证。

Class CPoint

{

  int m_iX;

  int m_iY;

}

CPoint pt;//声明一个点pt

pt的成员变量有时会被初始化为0,有时候不会。

读取未初始化的对象会导致不确定的行为。在某些情况下,读取未初始化的对象会让你的程序终止运行,但在另外一些情况下会读入一些随机的bits。最终导致不可预知的程序行为。

最佳的处理方法是永远在对象被使用之前将它初始化;对于无任何成员的内置数据类型,必须手动完成初始化。对象也一样,要保证每个对象在构造时初始化该对象的每个成员。

初始化列表比赋值更有效率。

赋值和列表初始化的区别:

1.使用赋值初始化对象变量时,在构造函数执行前会调用默认构造函数初始化,然后立刻执行赋值操作。这样默认构造函数所做的一切都因此浪费了。通过初始化列表做法,避免了重复操作。

2.有些情况下,即使赋值和初始化列表两者效率一样,也得使用初始化列表。如果成员变量是const或reference,它们就一定要初始化,而不能被赋值。

3.由于C++有着固定的初始化顺序,基类先于子类初始化,class中的变量总是以变量声明的顺序初始化,和成员初始化列表顺序无关,因此在成员初始化列表中初始化各变量时,最好以声明次序为顺序。

二.局部变量和全局变量

变量一般包含4种:全局变量,静态全局变量,静态局部变量,局部变量。

全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而是属于一个源程序文件。

全局变量说明:

1.外部变量定义必须在所有的函数之外,且只能定义一次。

2.外部变量说明出现在要使用该外部变量的各个函数内,在整个程序内可能出现多次。一般形式为extern 类型说明符 变量名

3.外部变量在定义时已分配了内存单元,外部变量定义可做初始赋值,外部变量说明不能再赋初始值,只是表明在函数内要使用某外部变量

4.外部变量可加强函数模块之间的数据联系,但又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来说这是不利的,因此在不必要时尽量不要使用全局变量

5.在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。

 静态存储变量通常是在变量定义时就分配存储单元并一直保持不变,直至整个程序结束。

从作用域看:

全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。其它源文件只需extern 关键字声明即可

静态全局变量也具有全局作用域,它只作用于定义它的文件里,不能作用到其他文件里,即它具有文件作用域。

静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,但只对定义自己的函数体内可见

局部变量也只有局部作用域,它只是在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,所占用的内存也被收回。

从分配内存空间看

全局变量,静态全局变量,静态局部变量都在静态存储区分配空间,而局部变量在栈里分配空间

 

C++变量

标签:

原文地址:http://www.cnblogs.com/fenghuan/p/4850110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!