我们希望定义这样的一个变量,它的值不能被改变。
const int bufSize =512;
1.常量对象初始化
const对象一旦创建后其值就不能再改变,所以const对象必须初始化,不能赋值(不能改变其值)。
(1)const int bufSize =512; //编译时初始化 const int bufSize =get_size(); //运行时初始化
(2)用一个对象去初始化另一个对象
int i=42;
const int ci =i;
int j=ci; //ci的常量特征仅仅在执行改变ci的操作时才会发生作用。
2.const的引用
2.1 对常量的引用不能被用作修改它所绑定的对象;
对常量的引用,所绑定的对象可能是一个常量,也可能是一个非常量;
const int ci=1024;
const int &r1=ci;
r1=42; // 错误;r1为常量的引用,不能用来修改它所绑定的对象;
int &r2=ci; //错误;试图让一个非常量引用指向一个常量对象;假设此初始化合法,则可通过r2改变它引用的对象,但ci是常量,不能改变;
int i=42; int &r1=i; const int &r2=i; //正确;但不允许通过让修改i的值; r1=0; //修改i的值; r2=0; //错误;
</pre><p>2.2 初始化const的引用</p><p><span style="font-size:14px"></span></p><h2><span style="font-size:14px">3.指向常量的指针(pointer to const)</span></h2><p><span style="font-size:14px">3.1 <span style="color:#ff0000">不能通过该指针改变其所指对象的值,没有规定那个对象的值不能通过其他途径改变。</span></span></p><p><span style="font-size:14px"> 要想存放常量对象的地址,只能使用指向常量的指针;</span></p><p><span style="font-size:14px"> <span style="background-color:rgb(255,255,255)"><span style="color:#3366ff"><strong>const</strong></span></span></span><span style="font-size:14px"><span style="background-color:rgb(255,255,255)"><span style="color:#3366ff"><strong> </strong></span></span>int <span style="color:#cc33cc">*</span>pt=&ci</span><span style="font-size:14px">;</span></p><p><span style="font-size:14px">3.2 指向常量的指针可以指向常量对象,也可以指向非常量对象;</span></p><p><span style="font-size:14px"> pt=&i; //指向了非常量对象,但是不能通过pt改变i的值,要改变i的值,通过其他途径。</span></p><h2><span style="font-size:14px">4. 常量指针(const pointer)</span></h2><p><span style="font-size:14px">4.1 常量指针指向非常量对象</span></p><p><span style="font-size:14px"> int <span style="color:#cc33cc">*</span><strong><span style="color:#3366ff">const </span></strong>pt=&i; // 常量指针必须初始化</span></p><p><span style="font-size:14px">4.2 常量指针指向常量对象,因要想存放常量对象的地址,只能使用指向常量的指针,所以此时为指向常量对象的常量指针</span></p><p><span style="font-size:14px"> 此时不论是pip所指的对象的值,还是指针pip自己存储的那个地址都不能改变。</span></p><p><span style="font-size:14px"> <strong><span style="color:#3366ff">const </span></strong>int <span style="color:#cc33cc">*</span><span style="color:#3366ff"><strong>const </strong></span>pip-&ci;</span></p><p><span style="font-size:14px">4.3 常量指针,常量对象中对象为指针,因常量对象必须初始化,所以常量指针必须初始化。</span></p><p><span style="font-size:14px">4.4 <span style="color:#ff0000">一旦初始化完成,常量指针的值(存放在指针中的那个地址)就不能再改变了,但其指向非常量对象的值可以改变。</span></span></p><h2><span style="font-size:14px">5. 常量成员函数(引入const成员函数)</span></h2><p><span style="font-size:14px"> void get_time() <span style="color:#3366ff;"><strong>const</strong></span>;</span></p><p><span style="font-size:14px">5.1 默认情况下,隐式的this指针的类型是指向非常量对象的常量指针,即Sales_data *const this,必须初始化。</span></p><p><span style="font-size:14px"> 如果要初始化this,使其绑定一个常量对象,则需将this声明为指向常量的常量指针,即const <span style="font-family: monospace; font-size: 14px; white-space: pre; background-color: rgb(240, 240, 240);">Sales_data *const this;从而提高this的灵活性。</span></span></p><p><span style="font-size:14px"><span style="font-family: monospace; font-size: 14px; white-space: pre; background-color: rgb(240, 240, 240);"> 然而,this是隐式的,不能显示定义。c++的做法是将const放在成员函数的参数列表之后,这样使用const的成员函数被被称作<strong><span style="color:#ff0000;">常量成员函数</span></strong>。紧跟在参数列表后面的<span style="color:#3366ff;">const表示this是一个指向常量的指针。</span></span></span></p><p><span style="font-size:14px"><span style="font-family: monospace; font-size: 14px; white-space: pre; background-color: rgb(240, 240, 240);"><span style="color:#3366ff;"> </span></span></span></p><p><span style="font-size:14px"><span style="font-family: monospace; font-size: 14px; white-space: pre; background-color: rgb(240, 240, 240);">6. 常对象</span></span></p>