[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、程序中尽量不要出现同名变量

原文地址:https://www.cnblogs.com/immjc/p/8016596.html