关于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标识符都是只读变量