【C++ Primer】变量和基本类型

变量:
          列表初始化:                          

int unit_sold = 0:
int unit_sold = {0}:
int unit_sold{0}:
int unit_sold(0):

用花括号初始化变量称为列表初始化。当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:

long double ld = 3.1415926536;
int a{ld}, b = {ld};                 //错误:转换未执行,因为存在丢失信息的危险
int c(ld), d = ld;                   //正确:转换执行,且确定丢失了部分值

变量声明和定义的关系:
       如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示地初始化变量:

extern int i;                //声明 i 而非定义 i
int j;                       //声明并定义 j

       任何包含了显示初始化的声明即变成定义。我们能给有extern关键字标记的 变量赋一个初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明了,而变成定义了:

extern double pi = 3.1416;            //定义

在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。变量能且只能被定义一次,但是可以被多次声明。

名字的作用域:
       作用域是程序的一部分,C++语言中大多数作用域都以花括号分隔。

for (int val = 1; val <= 10; ++val)         

名字val定义于for语句内,在for语句之内可以访问val,但在main函数其他部分就不能访问它了。
嵌套的作用域:
       作用域一旦声明了某个名字,它所嵌套着的所有作用域中都能访问改名字。同时允许在内层作用域中重新定义外层作用域已有的名字。

引用:
         引用为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:

int ival = 1024;
int &refVal = ival;                //refVal指向ival(是ival的另一个名字)
int &refVal2;                      //报错:引用必须被初始化

引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。所有的操作等同于对被引用的操作。

const限定符:
         有时我们希望定义这样一种变量,它的值不能被改变

const int bufferSize = 512;

这样就把bufferSzie定义成了一个常量。任何试图为bufferSize赋值的行为都将引发错误:

bufferSzie = 512;                //错误:试图向const对象写值

因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。

 const紧挨着变量时,它限定的是变量,如第一条;当const紧挨着变量类型,即位于句首时,它限定的是变量所操作的对象的类型。

猜你喜欢

转载自blog.csdn.net/q_z_r_s/article/details/82453690