关于const的疑问:

const什么时候是只读变量?什么时候是常量?

const常量的判别准则:

 

示例程序与结果如下:

 

从输出结果可以看出,它们代表的是同样的内存空间。这个程序告诉我们,C++为const修饰的变量仍然分配空间。一般通过指针或者引用来使用这片空间。

 示例程序:

 

第20行将y的地址转换为非const的指针。并在22行修改这块地址空间的值。

示例程序:

 

27行将y赋值给用const修饰的z将生成一个只读变量z。而不是真正意义的常量。

示例程序:

 

打印结果为a,a,c。第40行将字符a赋值给char引用rc,但是这并不影响引用trc的值,因为trc在初始化的时候使用的是不同类型的变量,即trc是int型引用,c是char型,这样就导致又产生一个只读变量,因此,我们在40行改变rc(rc和c指的同一片空间)的值,不会影响到trc所代表的内存空间。

 

引用与指针有什么关系?如何理解“引用的本质就是指针常量”?

 

 

 

 

为了回答上图中的问题,给出如下的程序:

 

上图中的程序编译运行没有错误。

再次修改程序,结果如下:

 

我们在17行添加了数组的定义,结果编译出错了。

原因在于,C语言中的数组中每个元素都是相邻的,地址是递增的,而C++兼容C语言,因此,C++具有同样的特性。

而17行的引用数组破坏了这个特性。因为这几个元素的地址已经不是相邻的了。

在C++中不支持引用数组。

小结:

  指针是一个变量

  引用是一个变量的名字

  const引用能够生成新的只读变量

  在编译器内部使用指针常量实现引用

  编译时不能直接确定初始值的const标识符都是只读变量

 

posted on 2018-08-23 23:45  周伯通789  阅读(148)  评论(0编辑  收藏  举报