gpt4 book ai didi

c++ - 没有定义的 typedef 结构

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:04 25 4
gpt4 key购买 nike

我正在查看我使用的 C++ 库的 header ,其中有一行是这样的:

typedef struct asdf_t asdf_t;

源代码中的任何地方都没有asdf_t 的定义。这条线在做什么?

最佳答案

这就是所谓的声明不透明结构!该 header 中可能有一些函数和/或类使用指向 asdf_t 类型的指针 - 这在 C++ 中允许用于“未定义”结构。但是,不会(不能)有声明为 asdf_t实例的变量、类成员或函数参数。

因此,例如,您的 header 稍后可能会声明以下类:

class GoodBoy {
public: GoodBoy();
~GoodBoy();
private:
asdf_t* forMyEyesOnly; // Only a pointer - definition not needed!
}

但它不能有这个:

class BadGirl {
public BadGirl();
~BadGirl();
private:
asdf_t notForAnyOneToSee; // Won't compile - would need definition.
}

为什么要这样做?

通常,这是因为您正在使用的库的创建者不想让您知道该结构的详细信息!但是,它们必须提供这样一个“最小”定义,以便您可以使用类,等等,根据需要使用或引用该结构:因此,例如,在 GoodBoy 类的>实现(即私有(private)源文件,其中为 asdf_t 提供了完整定义),可以让构造函数和析构函数做类似的事情,比如:

GoodBoy::GoodBoy() {
forMyEyesOnly = new asdf_t; // Note: Neither the 'new' operation, nor...
}
GoodBoy::~GoodBoy() {
delete forMyEyesOnly; // ...the 'delete' can compile without FULL DEFINITION!
}

澄清

通常,这样的不透明结构 只需通过以下方式声明:struct asdf_t;!然而,typedef struct asdf_t asdf_t;typedef struct asdf_t; 也是有效的语法(如果有点奇怪的话)。

延伸阅读

关于不透明结构以及如何声明它们的 Stack Overflow 讨论很好(如果有点旧),here .

关于c++ - 没有定义的 typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58265294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com