[C++] 变量
变量
变量定义的基本形式:首先是类型说明符,随后紧跟着一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。
对象(变量)是具有某种数据类型的内存空间。
列表中每个变量名的类型都由类型说明符指定,定义时还可以为一个或多个变量赋初值。
在同一条定义语句中,可以用先定义的变量值去初始化后定义的其他变量。
初始化与赋值
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
初始化形式
int i = 0; int i = {0}; int i(0); int {0};
对于内置类型,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。(e.g.比如存在类型转换时,double to int)。
默认初始化
内置类型的变量未被显示初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0,。定义在函数体内的内置类型将不被初始化,一个未被初始化的内置类型变量的值是未定义的。试图拷贝或以其他形式访问该类型将引发错误。
如果要求显示初始化则类的构造函数使用explicit关键字。
如果类的对象没有显示初始化,则其值由类确定。
变量声明与变量定义
为了支持分离式编译,C++语言将声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义负责创建与名字关联的实体。
变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。
变量能且只能被定义一次,但是可以被多次声明。
如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量。
注意:在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
extern int i = 0; // definition int iy; // definition extern int j; // declaration
标识符
C++标识符由字母、数字、下画线组成,其中必须以字母或下画线开头,标识符长度没有限制,但是对大小写字母敏感。
变量命名规范
C++中关于变量命名的规范:
1:能体现变量的实际意义
2:变量名一般采用小写字母
3:用户自定义变量名可以以大写字母开头
4:多个单词定义的变量名应有区分Student_loan 而不是 Studentloan
名字的作用域
作用域是程序的一部分,在其中名字有其特定的含义。
同一个名字在不同的作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。
全局作用域
块作用域
嵌套作用域:作用域中一旦声明了某个名字,它所嵌套着的所有作用域中都能访问该名字。同时,允许在内层作用域中重新定义外层作用域已有的名字。
如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。
Tips:
1、变量使用之前需要先定义声明。
2、如果在定义变量时没有指定初始值,那么变量会被默认初始化。
3、定义在任何函数体外的变量会被初始化为0,
4、定义在函数体内部的变量不会被初始化。
5、类的对象未被初始化,则初值由类决定。
6、声明:使得名字为程序所知,如果想要使用该变量,则必须实现包含其声明。声明会确定变量的名字和类型
7、定义:创建于名字关联的实体,定义会申请存储空间,可能会赋予初始值
8、如果想声明一个变量而不想定义它,那么可以在变量名前加extern关键字
9、新建局部变量会覆盖同名的全局变量
10、程序中尽量不要出现同名变量