《C++ Primer》第五版,中文版。231 页。
为什么不是引用或者普通的变量?
this指针的常量性和函数的常量性相关,和函数签名有关
const 函数 中,是 this 是
const T*const this;
const volatile 签名的 函数中是 const volatile T *const this;
volatile 签名的 函数中是 volatile T *const this;
函数后面没有签名标志的是非常量函数
this 参数是 T *const this;
this 指针,在非静态 成员函数中处处都要用到,
一旦修改了,就不可用了,所以是不可修改的。
this 指针,是非静态成员函数的形式参数,指向调用该函数的那个对象。
这个不变性(永远指向调用这个函数的对象),
是必须保证的,所以不能修改。
是指针常量,不是常量指针
const pointer 翻译为 指针常量 更形象,更贴切
而 point to const pointer 翻译为常量指针更好
这仅仅是语言问题,翻译问题
在成员函数内部可以用指针常量this来访问与成员函数的调用相关联的对象(this是一个关键字)。
假设我们已经设计了一个File类,它有一个成员函数copy,该函数定义如下:
void File::copy(File& dest)
{
if(this == &dest) //can't copy File to itself
return;
//otherwise, copy thi......
答案就在这里:C++常量指针this
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
this应该是TYPE* const pointer
至于为何为指针,而不是引用。那时因为指针更方便些,毕竟引用不能赋值
也很难和C代码合作
例如WinAPI 往往需要提供指针
C++既然要兼容C(更加贴近底层)
更多使用指针,而不是引用就很自然了
对象则不大可能,因为对象值传递效率比较低,多态则没有可能用C++对象实现
this不是普通的指针吗?