C++ Primer 学习笔记_4_变量和基本类型(续1)

来源:互联网 发布:mac 不能更新10.11.6 编辑:程序博客网 时间:2024/05/18 13:10


变量和基本类型



四、const限定符

[cpp] view plaincopyprint?
  1. #include <iostream>  
  2.   
  3. int main()  
  4. {  
  5.     //for循环语句存在两个问题  
  6.     for (int index = 0;index != 512; ++index)  
  7.     {  
  8.         //...  
  9.     }  
  10.     return 0;  
  11. }  
  12. /* 
  13. *1、程序的可读性:存在魔数512[魔数:他的意义在上下文中并没有体现出来,好像这个数是魔术般变出来的] 
  14. *2、程序的可维护性... 
  15. */  

1、定义const对象

[cpp] view plaincopyprint?
  1. //bufSize此时是一个左值,但是现在这个左值不可修改!  
  2. const int bufSize = 512;  

    因为常量在定义之后就不能修改,所以定义时就必须初始化!



2const对象默认为文件的局部变量

    除非特殊说明,在全局作用域中声明的const变量是定义该对象的文件的局部变量,此变量只存在于那个文件中,不能被其他文件访问!

    如若想被其他文件访问,需要在const前加extern关键字!

[cpp] view plaincopyprint?
  1. //file_1.cc  
  2.     extern const int bufSize = 512;  
  3.   
  4. //file_2.cc  
  5.     extern const int bufSize;  
  6.     for (int index = 0;index != bufSize; ++index)  
  7.     {  
  8.         //...  
  9.     }  

【说明:】非const对象默认为extern。而const对象默认为非extern,要使const变量能够在其他的文件中访问,必须显式指定它为extern。 

P50

[cpp] view plaincopyprint?
  1. //习题2.23(b)下列语句是否正确  
  2.     int cnt = 0;  
  3.     const int sz = cnt;  

五、引用

    引用的主要作用是用作函数的形式参数。

1、下列语句是否正确

[cpp] view plaincopyprint?
  1. int ival = 1024;        //正确  
  2. int &refVal_1 = ival;       //正确  
  3. int &refVal_2 = refVal_1;   //正确  
  4. int &refVal_3;          //错误  


2、当引用初始化之后,主要该引用存在,他就保持绑定到初始化时的对象,不能将引用绑定到另外一个对象!

    初始化是指定引用指向哪个对象的唯一方法!


3const引用[指向const对象的引用]

[cpp] view plaincopyprint?
  1. /* 
  2. *仅仅允许const应用绑定到需要临时变量作为媒介来完成完全绑定过程的值 
  3. *因为const引用是只读的,即: 
  4. *非const引用只能绑定到与该引用相同类型的对象, 
  5. *const引用则可以绑定到不同但相关的类型的对象或绑定到右值。 
  6. *理解下面程序: 
  7. */  
  8.     int ival = 1024;  
  9.     const int &refVal_1 = 1024;  
  10.     const int &refVal_2 = ival;  
  11. //  int &refVal_3 = refVal_2;  
  12.   
  13.     int i = 42;  
  14.     const int &r = 42;  
  15.     const int &r2 = r + i;  
  16.   
  17.     double dval = 3.14;  
  18.     const int &refDval = dval;  //如果int前的const去掉对不对呢?  

P52

[cpp] view plaincopyprint?
  1. //习题2.25,判断下列程序的输出结果  
  2. #include <iostream>  
  3.   
  4. int main()  
  5. {  
  6.     int ival = 2.01;  
  7.     int &rval2 = ival;  
  8.     const int &rval3 = 1;  
  9.     rval2 = rval3;  
  10.     ++ rval2;  
  11.     std::cout << rval3 << std::endl;  
  12.     return 0;  
  13. }  

六、typedef

    typedef用开定义类型的同义词

[cpp] view plaincopyprint?
  1.     typedef double wages;  
  2.     typedef wages salary;  
  3. //typedef定义以关键字typedef开始,后面是数据类型和标识符,标识符或类型名并没有引入新的类型,而至是现有的数据类型的同义词。  

typedef通常被用于以下三种目的:

    1、为了隐藏特定类型的实现,强调使用类型的目的

    2、简化复杂的类型定义,使其更易理解

    3、允许一种类型用于多个目的,同时使得,每次使用该类型的目的明确

0 0
原创粉丝点击