【问题标题】:C++ Type const* p and Type const* const p [duplicate]C++ 类型 const* p 和类型 const* const p [重复]
【发布时间】:2013-04-14 07:07:36
【问题描述】:

我有这个Type const* p 方法。确定p的指针*p永远不会被修改吗?

Type const* const q 相同。

【问题讨论】:

  • 相关的,不同的问题。我想知道如果 p 是Type const* p,我是否可以修改 p 的指针。谢了。

标签: c++ pointers constants mutators


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    是的,它不能被修改,但它只会保证指针指向的变量是恒定的,它与Type const* const q不同,它也保证指针是恒定的

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2011-03-07
      • 2015-07-16
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多