const and this

const

1.基本用法

i 常量的声明

1 const double Pi=3.1415926 ;
2 const int aq=10;
3 int q=5;
4 const int * p=&q;

简单来说就是在程序里面不变的值,用const 来声明之后起到保护作用!

ii 对函数的作用

1. void Fuction1 ( const int r ); //此处为参数传递const值,意义是变量初值不能被函数改变

2. const int Fuction1 (int); //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字。但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义类型,返回值是常量是非常重要的,见下面条款3

3.  Class CX; //内部有构造函数,声明如CX(int r =0)

CX  Fuction1 () { return CX(); }

const CX Fuction2 () { return CX(); }

如有上面的自定义类CX,和函数Fuction1()Fuction2(),我们进行如下操作时:

Fuction1() = CX(1); //没有问题,可以作为左值调用

Fuction2() = CX(1); //编译错误,const返回值禁止作为左值调用。因为左值把返回值作为变量会修改其返回值,const声明禁止这种修改。

4.  函数中指针的const传递和返回:

int F1 (const char * pstr); //作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的初值,这里在函数内部任何修改*pstr的企图都会引起编译错误。

const char * F2 (); //意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指向const对象的指针。

const char * const F3(); //比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明了这个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理。

5.   函数中引用的const传递:

void F1 ( const X& px); //这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本,然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效。

**另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性,且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙。

1 void CCube::say() const
2 {
3 cout<<"这个是正四面型在喊话"<<endl;
4
5 }

this

基本用法

个人认为this的意义就在于一个class的实例化后的本身

一个引用:

当你进入一个房子后,

  你可以看见桌子、椅子、地板等,

  但是房子你是看不到全貌了。

  对于一个类的实例来说,

  你可以看到它的成员函数、成员变量,

  但是实例本身呢?

  this是一个指针,它时时刻刻指向你这个实例本身

内存实际:对于这方面推荐一本书大家看看可以:http://115.com/file/dnrb7g66

参考:http://blog.csdn.net/jsjwql/article/details/1779516

 

 

原文链接: https://www.cnblogs.com/leisure/archive/2011/10/10/thisconst.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    const and this

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/33938

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午10:58
下一篇 2023年2月8日 上午10:59

相关推荐