Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100090
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 536
  • 用 户 组: 普通用户
  • 注册时间: 2020-05-07 21:35
文章分类

全部博文(50)

文章存档

2020年(50)

我的朋友

分类: C/C++

2020-05-30 14:25:01

const Tconst T*T *constconst T&const T*& 的区别       


1const T

所修饰变量的内容不能被修改

class A
{
int a;
public:
A(int b=5)
{
a = b++;
}
void printf()
{
cout <<"a=   "<< a + 1 << endl;
}
//只有const A a(2)调用
void printf()const
{
cout << "a=   " << a  << endl;
}
};
int main()
{
A a;
const A b(2);
//在这里存在const 使A b()里面的值使无法改变的
a.printf();
b.printf();
system("pause");
return 0;
}

2const T*

   所修饰的变量是个指针,这个指针的指向不能被修改;要修改变量的内容,不能够改变指针指向,但可以通过解引用的方式直接赋值。
   指针指向的内容是一个常量(即地址),可以通过改变常量(地址)中的值来改变指针解引用的值。但是不能直接解引用指针来改变值,因为这里的指针是一个常量。

EG:
    const int *p; int i=10 ;  p=&i;正确
    const int *p; int i=10 ;  *p=i;错误


3T *const


所修饰的变量是个指针,这个指针的内容不能被修改;要修改变量的内容,不能够改变指针的内容,但可以通过改变指针指向来修改
  eg:
        int * const p=&i ; (错误)
        不可以使用地址改变,p指向的已经固定了,
         int * const p=i;正确

4T& const T&

引用、常引用,常引用一旦指向一个实体,就不能再被指向其它实体


常引用可以被变量或者引用初始化

引用不能被常量或者常引用初始化,但变量可以被常引用初始化


5const T*& T*const&


指向常量对象的指针的引用,这可以分两步来理解:


const T*是指向常量的指针;

const T*&指向常量的指针的引用

 

const T*& T*const&相同点:

都是对指针的引用

const T*& T*const&不同点:


  这个与const T*T*const类似,只是分别多了个引用和常引用

  要修改const T* &所修饰变量的值,因为const T*是个常量指针,所以不能够通过解引用方式直接赋值;但是可以改变引用的对象,原来引用的对象是const T*

  要修改T* const &所修饰变量的值,因为这个引用是常引用,所以引用的对象无法改变;但可以通过解引用的方式对其进行赋值

  通常情况下,变量可以被常量初始化,但常量不能被变量初始化,但放在引用这里似乎就理解不通了;这就需要从本质上深刻的理解引用,引用是一个实体的别名,它可以代表实体,但它是以实体为主,实体决定引用的属性,反过来引用并不能决定实体的属性;总结一句话就是  实体为主,引用为辅。


  举个栗子:假设引用可以被常量初始化,因为它不是常引用,这时你就可以通过修改引用来修改实体,但以实体本身属性为主,所以它不能修改实体;常引用可以被变量初始化,这就是实体为主的例证,引用就像寄生在实体上一般,实体改变,引用虽然是常引用,但是引用为辅。


常引用是指不能通过修改此引用来修改实体的值。
常引用声明方式:const 类型标识符 &引用名=目标变量名;

 int a ;
 
const int &ra=a;
 
ra=1; //错误
 
a=1; //正确
解引用:
  
在百度上面的解释是:"‘解引用’,我倒觉得可以从另一个角度理解,"*“的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解"就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为"解引用”。也就是说,解引用是返回内存地址中保存的值。”,个人理解就是将指针p中的地址给解析出来

 https://blog.csdn.net/qq_36327203/article/details/85568560

阅读(30) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~