我有这个Type const* p
方法。确定 p 的指针*p
永远不会被修改吗?
与Type const* const q
.
Type const* p
是一个指向 const 类型的对象的指针Type
。要从左到右阅读,指针指向由星号之前的所有内容定义的类型。同样的方式,Type const* const q
是一个指向类型为 const 对象的 const 指针Type
。
此外,*p
不能通过 p 进行修改。p
被定义为 const 指向*p
并承诺不修改它。但是,*p
p 的指针可以被任何其他指向它的指针修改。
例如,我们可以有
Type t;
Type const* pc = &t;
Type *pnc = &t;
pc
承诺不改变 t,pnc
没有。假设类 Type 包含一个 constinspect() const
方法和一个非常量mutate()
方法。那么我们可以有
pc->inspect();
pnc->inspect();
pnc->mutate();
而这个会引起编译器的错误:
pc->mutate();
Type const* const q
是指向 const 对象的 a,*q
不能通过 q 修改,就像 p 一样。更重要的是,指针q
不能被修改:它不能被第二次分配指针。
此外,虽然这听起来很奇怪,但您可以在代码中更改Type
指针指向的类型的对象Type const* p
——但不能通过p
.
是的,它不能被修改,但是,它只会保证指针指向的变量是常量,它与Type const* const q
保证指针是常量的不同