变量的基本知识

一、变量初始化规则

1、内置类型变量的初始化

  内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。除了用作赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。未初始化变量引起的错误难以发现。

2、类类型变量的初始化

  类通过定义一个或多个构造函数来控制类对象的初始化。

  默认构造函数。

  例如:string类定义了默认构造函数来初始化string变量为空字符串,即没有字符的字符串。

  有些类类型没有默认构造函数。对于这些类型来说,每个定义都必须提供显式的初始化式。没有初始值是根本不可能定义这种类型的变量的。

二、声明和定义

  ①变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

  ②声明:用于向程序表明变量的类型和名字。可以通过使用extern关键字声明变量名而不定义它。

      extern声明不是定义,也不分配存储空间。它只说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

  只有声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化

  如果声明有初始化式,那么它可以被当作是定义,即使声明标记为extern:

    extern double pi=3.1416;

    虽然使用了extern,但是这条语句还是定义了pi,分配并初始化了存储空间。只有当extern声明位于函数外部时,才可以含有初始化式(即全局变量

三、const对象默认为文件的局部变量

  在全局作用域里定义非const变量时,它在整个程序中都可以访问。我们可以把一个非const变量定义在一个文件中,假设已经做了合适的声明,就可在另外的文件中使用这个变量。

  与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。

  非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern

四、引用

  不能定义引用类型的引用,但可以定义任何其他类型的引用。

  const引用是指向const对象的引用

  非const引用只能绑定到与该引用同类型的对象

  const引用则可以绑定到不同但相关的类型的对象或绑定到右值

  const引用不能进行赋值。

五、枚举

  定义和初始化枚举:enum open_modes{input,output,append};

  枚举成员是常量。

  不能改变枚举成员的值。

  枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行

  例如:

    enmu Points{point2d=2,point2w,point3d=3,point3w};

    Points pt3d=point3d;对的

    Points pt2w=3;错

    pt2w=polygon;错,因为polygon不是Points的成员

    pt2w=pt3d;对的

六、类类型

七、使用struct关键字

  如果使用class关键字来定义类,那么定义的第一个访问标号前的任何成员都隐式指定为private,如果使用struct关键字,那么这些成员都是public。使用class还是struct关键字来定义类,仅仅影响默认的初始访问级别。

八、编写自己的头文件

  头文件一般包含类的定义、extern变量的声明和函数的声明。

  头文件用于声明而不是用于定义

  头文件可以定义类、值在编译时就已知的const对象(用常量表达式来初始化)和inline函数

  定义一般放在源文件中。

posted @ 2015-03-30 09:38  momo_Unique  阅读(234)  评论(0编辑  收藏  举报