- 首先,应该遵循一个规则,以防止为初始化变量引发的运行时故障:初始化每一个内置类型的变量。
常规的变量初始化大家都很熟悉,现在说一下c++11标准新增的列表初始化:
以下有几种初始化方式:
int a = 0;
int a = {0};
int a{0};
int a(0);
都可以把a初始化为0.
- 但是列表初始化有一个重要的特点就是:当用于内置类型的变量时,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器会报错。
double a = 3.14;
int b{a}, c = {a}; //错误:转换不会执行,因为存在丢失信息的风险
int d(a), e = a; //正确:转换执行
变量声明和定义的区别:
- 变量声明规定了变量的名字和类型,但是不申请存储空间,也没有初始值
- 变量定义,除了规定了变量的名字和类型,还申请存储空间,同时可以有初始值
如果想声明一个变量而不定义,则要在变量名之前添加关键字extern,并且不要显示的初始化变量。
extern int i; //声明i而非定义i
int i; //声明并定义i
extern int i = 2; //错误