【问题标题】:Why declare a constant pointer using the const keyword when the reference (const pointer) is available?当引用(常量指针)可用时,为什么要使用 const 关键字声明常量指针?
【发布时间】:2011-12-05 20:11:04
【问题描述】:

例如:

我可以创建一个常量指针,它指向一个我可以通过我的指针改变的对象。无法重新分配指针:

MyObj const *ptrObj = MyObj2 

我为什么要用这个:

MyObj &ptrObj = MyObj2

【问题讨论】:

  • 你不会,因为它没有如图所示编译。假设MyObj 是一个类型,MyObj2MyObj 的一个实例,那么你仍然需要一个& ...

标签: c++ pointers reference constants


【解决方案1】:

你所拥有的不是const 指针,而是指向const 对象的指针——也就是说,指针可以更改,但对象不能。 const 指针是:

MyObj *const ptrObj = &MyObj2;

至于为什么您可能更喜欢它而不是参考,您可能希望灵活地使用 NULL 特殊值来处理某些事情 - 您无法通过参考获得这一点。

【讨论】:

    【解决方案2】:

    你错了。你所拥有的是一个 mutable 指向 constant 对象的指针:

    T const * p;
    p = 0;            // OK, p isn't const
    p->mutate();      // Error! *p is const
    T const & r = *p; // "same thing"
    

    你真正想要的是一个 constant 指向 mutable 对象的指针:

    T * const p = &x; // OK, cannot change p
    T & r = x;        // "same thing"
    p->mutate();      // OK, *p is mutable
    

    确实,引用在道德上等同于常量指针,即T & vs T * const,常量版本T const & vs T const * const

    如果你坚持要获得一些建议,那么我会说,“不要使用指针”。

    【讨论】:

      【解决方案3】:

      指针和引用之间的重要区别在于它们可以引用多少个对象。引用总是指一个对象。一个指针可以引用零(当指针为空时)、一个(当指针被分配到单个对象的位置时)或 n 个对象(当指针被分配到数组内的某个点时)。

      指针引用 0 到 n 个对象的能力意味着指针在它可以表示的内容上更加灵活。当不需要指针的额外灵活性时,通常最好使用引用。这样,阅读您的代码的人就不必确定指针是指零个、一个还是 n 个对象。

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 1970-01-01
        • 2015-10-06
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        相关资源
        最近更新 更多