【问题标题】:meaning of ** within c++ class declarationsc++类声明中**的含义
【发布时间】:2020-07-21 21:13:03
【问题描述】:

我对 C++ 中类类型后置双星号的使用感到困惑。

我正在阅读的代码的解释是

class ThisClass : protected SuperClass
{
  public:
    void MemberFunction(ThisClass** identifier);
}

我了解ThisClass* identifier 带有一个星号,表示identifier 是一个指向ThisClass 实例的指针。 ** 是重复的一轮“指点”,还是有着完全不同的含义?

我应该如何解释成员函数的参数?

【问题讨论】:

  • ThisClass**pointer-to-pointer-to-ThisClass
  • 无特殊含义,就是指向指针的指针。

标签: c++ class syntax member


【解决方案1】:

**是重复的一轮'指点',

是的,它表示identifier的类型是pointer-to-pointer-to-ThisClass,即指向一个ThisClass*对象,它本身就是一个指针类型的对象(指向一个ThisClass 对象)。

或者有完全不同的含义?

不,没有特殊含义。


类似地,在表达式中** 表示重复取消引用。

【讨论】:

  • 好奇之后。 ThisClass* 是否被隐含地定义为它自己的一个类(因此它的实例存在),还是为了描述的目的,它是虚构的,好像存在?
  • @XavierStuvw 指针是与任何其他对象一样的对象。您必须确保传递给函数的ThisClass** 在其生命周期内实际上指向ThisClass* 对象,否则您将像往常一样拥有一个悬空指针。这并没有隐含地发生或特别的事情。
  • @XavierStuvw 澄清一下:正式 C++ 语言中的 object 并不专门指 OOP 意义上的类实例。例如。每个非引用变量,即使是 int x; 这样的基本类型,在我这里指的形式意义上也是一个 object。所以ThisClass* ptr; 会声明一个ThisClass* 类型的变量(并因此引入一个object),它是一个指针类型,而不是一个类类型。
  • 谢谢。在 C++ 上下文中突出显示了单词 object 的用法——因此从类类型中区分指针类型——特别有用。您可能希望将此解释带入答案中以提高知名度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多