2.3 变量

来源:互联网 发布:阿里妈妈淘宝联盟返利 编辑:程序博客网 时间:2024/06/10 00:03

       2.3 变量
        2.3.1 什么是变量
        变量提供了程序可以操作的有名字的存储区,C++程序员常常把变量称之为变量或对象。
        在C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在改变量上的操作集。
        左值和右值:左值可以出现在赋值语句的左边或者右边;右值只能出现在赋值语句的右边。

        2.3.2 变量名
        变量名即变量标识符,可以由字母、数字和下划线组成,但变量名必须以字符或下滑线开头。
        C++中的标识符都是大小写敏感的。
        1. C++关键字
        C++保留了一组词用作该语言的关键字。关键字不能用作程序的标识符。
        2. 变量命名习惯
        变量名一般用小写字母。
        标识符应使用能帮助记忆的名字。
        包含多个词的标识符书写为在每个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写。

        2.3.3 定义对象
        每个定义都是以类型说明符开始,后面紧跟着以逗号分开的含有一个或多个说明变量的列表,分号结束定义。
        1. 初始化
        变量定义指定了变量的类型和标识符,也可以为对象提供初始化值。定义时制定了初始值的对象被称为是已初始化的。
        C++支持复制初始化和直接初始化。复制初始化语法用等号,直接初始化则是把初始化式放在括号中。
        2. 使用多个初始化式
        初始化内置类型的对象只有一种方法:提供一个值,并且把这个值复制到新定义的对象中。对内置类型来说,复制初始化和直接初始化几乎没有差别。
        对类类型来说,有些初始化仅能用直接初始化完成。有多个初始化式时不能使用复制初始化。
        3. 初始化多个变量
        当一个定义中定义了两个以上变量的时候,每个变量都可能有自己的初始化式。
        对象的名字立即变成可见,所以可以用同一定义中前面已定义变量的值初始化后面的变量。
        已初始化变量和未初始化变量可以在同一个定义中定义。
        两种形式的初始化文法可以相互混合。
        对象可以用任意复杂的表达式(包括函数的返回值)来初始化。

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

        2. 类类型变量的初始化
        每个类都定义了该类型的对象可以怎样初始化。类通过定义一个或多个构造函数来控制类对象的初始化。
        如果定义了某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。它是通过定义一个特殊的构造函数即默认构造函数来实现的。这个构造函数之所以被称作默认构造函数,是因为它是默认运行的。如果没有提供初始化式,那么就会使用默认构造函数。
        大多数类都提供了默认构造函数。有些类类型没有构造函数。对这些类型来说,每个定义都必须提供显式的初始化式。没有初始值是根本不可能定义这种类型的变量的。

        2.3.5 声明和定义
        声明用于向程序表明变量的类型和名字。
        定义也是一种声明。当定义一个变量时我们声明了它的类型和名字。
        可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
        extern声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。
        程序中变量可以声明多次,但只能定义一次。
        只有当声明也是定义时,声明才可以有初始化式。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。因为只有定义才分配存储空间,初始化式必须要有存储空间来进行初始化。

        2.3.6 名字的作用域
        C++程序中,每个名字都与唯一的实体相关联。用来区分名字的不同意义的上下文称为作用域。作用域是程序的一段区域。一个名字可以和不同作用域中的不同实体相关联。
        C++语言中,大多数作用域都是用花括号来界定的。一般来说,名字从其声明点开始知道声明点所在的作用域结束处都是可见的。
        定义在所有函数外部的名字具有全局作用域,可以在程序中的任何地方访问。
        定义在全局作用域中的名字可以在局部作用域中使用,定义在全局作用域中的名字和定义在局部作用域中的名字可以在语句作用域中使用。名字还可以在内部作用域中重新定义。

        2.3.7 在变量使用处定义变量
        变量的定义或声明可以放在程序中能摆放语句的任何位置。变量在使用前必须先声明或定义。
        在对象第一次被使用的地方定义对象可以提高程序的可读性。而且,在此处定义变量,更容易给它赋以有意义的初始值。
        放置声明的一个约束是,变量只在从其定义处开始到该声明所在的作用域结束处才可以访问。必须在使用该变量的最外层作用域里面或之前定义变量。

原创粉丝点击