顶层const 与 底层const

xiaoxiao2021-02-27  184

#include  "stdafx.h" #include<iostream>    using namespace std; /* 顶层const(top-level const)表示指针(或引用)本身是个常量。 底层const(low-level const)表示指针指的对象是一个常量。 一般当说到顶层或底层const的时候都是指针或者引用类型的,因为普通类型的const只能是底层的。 使用const的建议:  1、要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委; 2、要避免最一般的赋值操作错误,如将const变量赋值; 3、在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上; 4、const在成员函数中的用法要很好的使用; 5、不要轻易的将函数的返回值类型定为const; 6、除了重载操作符外一般不要将返回值类型定为对某个对象的const引用; */ void  f1(const  int    a) //声明一个函数 ,a正在函数体内不可变 { //a = 10; //错误 } void f2( const  int  *  p)//声明一个形参是指向常量整型的指针的函数,表示(*p)的值在函数内不会改变   { //*p = 10;//错误,*p的值不能改变 p= NULL; //正确,p可以变 }   void f3(  int * a)  { } int main() {     int a = 100;    const  int *p1 =  &a; // p1 指向的内容是常量 int *  const p2 = &a;//  p2 是常量,不能改变指针值 //    *p1 = 200;// 错误,p1指向的内容是常量  *p2 = 200; //正确 /*       tips: 指向“常量”的指针不代表它所指向的内容一定是常量,只是代表不能通过解引用符(操作符*)来改变它所指向的内容。 其实通过 a = 300 仍然可改变*p1的值。          正如  const  int  b= 100;   此处的b并不是不能改的,可以通过指针,修改其中的值,一个道理。   int *p =(int *) &b;  //强转  */   p1 = NULL;//正确 //p2 = NULL; //错误 ,p2是常量,不能改变指向   int  c = 1;    int *const p3 = &c;//顶层const ,表示指针p3本身是不可以改变的  const int  d = 10;//顶层const  , d表示是一个常量整型,d是不能够改变的   const int *p4 = &d;// 底层const , 表示p4指向的是一个常量整型,而p4本身是可以改变的   const int *p5 = &c;//底层const ,  表示p5只是自觉地不会改变它指向的值,但c的值可以变,这只是它的一相情愿罢了       // int *p5 = &d;//错误,因为通过指针p3可能会改变i的值,而d是不可以被改变的  ,除非强转转换   int e= 0; f1( e );// 传入实参 e , 正确因为v,void f1(const int a)表示在f1函数中不能改变a的值,因此对实参没什么特殊要求, //  只传进去值就可以了,这样i得到这个    const int g = 0;  f2(&g);//合法的    f2(&e);//合法的 , 当我们在函数内不需要改变传入的变量的值的时候,尽量使用const,这样对实参的限制更少一点。   // f3(  &g );// 错误, g是不可变得,但在放f3中可以变 }  
转载请注明原文地址: https://www.6miu.com/read-14848.html

最新回复(0)