gpt4 book ai didi

c++ - 一个奇怪的 C++ 类声明

转载 作者:行者123 更新时间:2023-11-30 02:32:04 26 4
gpt4 key购买 nike

已在 stackoverflow 中阅读此线程:Strange class declaration, 但仍然与 foo.h 中的以下代码混淆:

class Foo CHECKLEAKDCL {

我确信 Foo 应该是类名,因为有构造函数和析构函数可以暗示这一点。

我在这个 .h 文件中看不到任何与 CHECKLEAKDCL 相关的宏定义。

我也对 Strange class declaration 的答案感到困惑,它说:

Q_CORE_EXPORT isn't an identifier. It's a platform-dependent macro, and it's used to signal a class that's intended to be used across library boundaries.

谁能对此给出更多解释?


更新:

foo.h 中的 .h 文件中找到这一行:

#define CHECKLEAKDCL  : private CheckLeak

所以类声明应该是:

class Foo : private CheckLeak {

所以 Foo 正在扩展 CheckLeak,对吗?

最佳答案

如果您为 Windows 编译(使用 Visual Studio),它很可能会被评估为 Microsoft 特定的链接标识符之一,dllexportdllimport:

https://msdn.microsoft.com/en-us/library/81h27t8c.aspx

当您创建一个将从 DLL 导出或从应用程序中的 DLL 使用的类时使用它,并且依赖于此它被评估为 dllexport(DLL 导出类)或dllimport(导入类的应用程序)。

如果您使用 GCC 进行编译,它可能会评估为 gcc _-attribute__ 之一。如 __attribute__ ((visibility ("default"))) ( https://gcc.gnu.org/wiki/Visibility )

这些对核心 C++ 的扩展由编译器提供,以使某些任务更容易实现 (https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html)

编辑

在您更新答案之后……好吧,显然您拥有了一个类的私有(private)继承。但请注意,这是一个糟糕的宏,因为

#define CHECKLEAKDCL  : private CheckLeak

在您的类声明中添加一个 :,这样您就不能再使用该符号从基类继承。

我建议您完全摆脱那个宏,如果不能,请不要使用它,它会混淆您的代码。

关于c++ - 一个奇怪的 C++ 类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834838/

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