C++常量详解一(常量指针与常量引用的初始化)
1、常量 1.1、常量的初始化: 1.1.1分清了const对象后,让我们先把目光聚集到const对象这里。 const对象可以分为大致三类: const int m int *const p const int *const q 而这前两类都可以用来给非const对象或者const对象初始化,因为这前两类都是顶层const,初始化时的拷贝是不会对他们的自身值做出什么改变,即以下代码均正确。 //第一类 int m1=m;//正确 const int m2=m;//正确 //第二类 int *p1=p;//正确 int *const p2=p;//正确 const int *p3=p;//正确 const int *const p4=p;//正确 而第三类则需要我们注意一下,因为第三类还有一个底层const。 int *q1=q;//报错 int *const q2=q;//报错 const int *q3=q;//正确 const int *const q4=q;//正确 底层const有一个限制:当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const。 以上,是说这三类可以给哪些对象初始化,现在我们看看哪些可以给这三类初始化 第一类const int m //以下一些变量不初始化,我把重点落在类型。 int m1; const int m2; const int m=m1;//正确 const int m=m2;//正确 第二类int *const p //以下一些变量不初始化,我把重点落在类型。 int *p1; int *const p2; const int *p3; const int *const p4; int *const p=p1;//正确 int *const p=p2;//正确 int *const p=p3;//错误 int *const p=p4;//错误 这里的报错同样因为底层const有一个限制:当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const 第三类 const int *const q //以下一些变量不初始化,我把重点落在类型。 int *q1; int *const q2; const int *q3; const int *const q4; const int *const q=q1;//正确 const int *const q=q2;//正确 const int *const q=q3;//正确 const int *const q=q4;//正确 1.1.2 现在让我们把目光转回非const对象的初始化 //以下一些变量不初始化,我把重点落在类型。 const int *p; const int &r; 先考虑他们可以给哪些对象初始化 //以下一些变量不初始化,我把重点落在类型。 int *p1=p;//报错 int *const p2=p;//报错 const int *p3=p;//正确 const int *const p4=p;//正确 此处同样由于低层const的限制 第二类 const int &r //以下一些变量不初始化,我把重点落在类型。 int &r1=r;//错误 const int &r2=r;//正确 这里强调一下,引用不是对象,所以没有像 int *const &r或者const int *const &r这种形式 好,再考虑哪些可以给他们初始化 //以下一些变量不初始化,我把重点落在类型。 int *p1; int *const p2; const int *p3; const int *const p4; const int *p=p1;//正确 const int *p=p2;//正确 const int *p=p3;//正确 const int *p=p4;//正确 因为const int *p意义在于表明不可以通过p改变它所指的对象的值,这个对象可以不是常量,只是p所指的对象对于p来说是常量,所以它所指的对象是否const 其实并没有关系。 第二类 const int &r //以下一些变量不初始化,我把重点落在类型。 int &r1; const int &r2; const int &r=r1;//正确 const int &r=r2;//正确 这里const同样是指不能通过r改变它所引用的对象,所以它所引用的对象本身是不是const无关紧要。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |