申祷无
2016-05-20 06:09
采纳率: 73.2%
浏览 1.7k

C++ 中的 this 为什么定义成常量指针?

《C++ Primer》第五版,中文版。231 页。
为什么不是引用或者普通的变量?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • lm_whales 2016-05-20 06:23
    已采纳

    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 指针,是非静态成员函数的形式参数,指向调用该函数的那个对象。
    这个不变性(永远指向调用这个函数的对象),
    是必须保证的,所以不能修改。

    打赏 评论
  • lm_whales 2016-05-20 06:11

    是指针常量,不是常量指针

    4 打赏 评论
  • lm_whales 2016-05-20 10:08

    const pointer 翻译为 指针常量 更形象,更贴切
    而 point to const pointer 翻译为常量指针更好
    这仅仅是语言问题,翻译问题

    2 打赏 评论
  • Robot-S 2016-05-20 06:13

    在成员函数内部可以用指针常量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,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    打赏 评论
  • Eleven 2016-05-20 08:47

    this应该是TYPE* const pointer

    打赏 评论
  • lm_whales 2016-05-20 09:38

    至于为何为指针,而不是引用。那时因为指针更方便些,毕竟引用不能赋值
    也很难和C代码合作
    例如WinAPI 往往需要提供指针
    C++既然要兼容C(更加贴近底层)
    更多使用指针,而不是引用就很自然了

    对象则不大可能,因为对象值传递效率比较低,多态则没有可能用C++对象实现

    打赏 评论
  • ZSGG_ACM 2016-05-22 08:55

    this不是普通的指针吗?

    打赏 评论

相关推荐 更多相似问题