【发布时间】:2013-04-14 07:07:36
【问题描述】:
我有这个Type const* p 方法。确定p的指针*p永远不会被修改吗?
与Type const* const q 相同。
【问题讨论】:
-
相关的,不同的问题。我想知道如果 p 是
Type const* p,我是否可以修改 p 的指针。谢了。
标签: c++ pointers constants mutators
我有这个Type const* p 方法。确定p的指针*p永远不会被修改吗?
与Type const* const q 相同。
【问题讨论】:
Type const* p,我是否可以修改 p 的指针。谢了。
标签: c++ pointers constants mutators
Type const* p 是指向 Type 类型的 const 对象的指针。要从左到右阅读,指针指向由星号之前的所有内容定义的类型。同样,Type const* const q 是一个指向 Type 类型的 const 对象的 const 指针。
另外,*p 不能通过 p 进行修改。 p 被定义为 const 指向 *p 并保证不修改它。但是,p 的指针*p 可以被指向它的任何其他指针修改。
例如,我们可以有
Type t;
Type const* pc = &t;
Type *pnc = &t;
pc 承诺不会改变 t,pnc 不会。假设类 Type 带有一个 const inspect() const 方法和一个非常量 mutate() 方法。那么我们可以有
pc->inspect();
pnc->inspect();
pnc->mutate();
而这会引起编译器的错误:
pc->mutate();
Type const* const q 是一个指向 const 对象的对象,*q 不能通过 q 修改,就像 p 一样。更重要的是,指针q不能被修改:不能再次分配指针。
此外,虽然这听起来很奇怪,但您可以在代码中更改指针 Type const* p 指向的 Type 类型的对象——但不能通过 p。
【讨论】:
是的,它不能被修改,但它只会保证指针指向的变量是恒定的,它与Type const* const q不同,它也保证指针是恒定的
【讨论】: