例如:
我可以创建一个常量指针,指向一个可以通过指针更改的对象。指针无法重新分配:
MyObj const *ptrObj = MyObj2
为什么我会使用它:
MyObj &ptrObj = MyObj2
答案 0 :(得分:4)
你所拥有的不是const
指针,它是指向const
对象的指针 - 也就是说,指针可以改变,但对象不能。 const
指针将是:
MyObj *const ptrObj = &MyObj2;
至于为什么你可能更喜欢它而不是引用,你可能希望灵活地使用NULL
特殊值作为某些东西 - 你没有通过引用得到它。
答案 1 :(得分:2)
你弄错了。你拥有的是可变指向常量对象的指针:
T const * p;
p = 0; // OK, p isn't const
p->mutate(); // Error! *p is const
T const & r = *p; // "same thing"
你真正想要的是常量指向 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
。
如果你坚持要求一些建议,那么我会说,“不要使用指针”。
答案 2 :(得分:1)
指针和引用之间的重要区别在于它们可以引用多少个对象。引用总是指一个对象。指针可以指零(当指针为空时),一个(当指针指定单个对象的位置时)或n个对象(当指针指向数组内的某个点时)。
指针引用0到n个对象的能力意味着指针在它可以表示的内容方面更灵活。当指针的额外灵活性不是必需的时,通常最好使用引用。这样,读取代码的人不必确定指针是指零,一个还是n个对象。