如果 class 未初始化,C++ 编译器会生成 def ctor 吗?

Do C++ compilers generate a def ctor if the class was not initialized?

我写了一个实用程序 class(我猜是作为助手 class),它只有几个 static 成员函数可以使用在另一个 class 中。它没有任何非静态成员(变量或函数)。所以它也没有任何 explicit ctorsdtor.

问题是,我的编译器(GCC v11.2 和 -std=c++20)是否仍会为实用程序生成 隐式默认构造函数和 dtor class?如果是这样,那么我应该如何防止它这样做?因为我还没有在我的代码中初始化 class 的任何实例。

(我稍微回避了你的问题,而不是主动提供建议)如果你有一个 static 函数的集合并且你的 class 不需要任何状态

class Example
{
public:
    static void Foo();
    static int Bar();
};

那么您一开始就应该不使用 class,而这些可能应该是命名空间中的自由函数

namespace Example
{
    void Foo();
    int Bar();
}

仍然允许您将它们调用为 Example::Foo()Example::Bar() 但现在您不必担心有人试图实例化您的“class”,因为那不是什么你打算设计它。

如前所述,您应该为此类上下文使用命名空间。话虽这么说,要回答你的问题,答案是“不是真的”。编译器必须“创建”一个,但不必为其生成代码。

我在标准中找不到任何明确说明这一点的内容,但是,如果您创建一个只有静态函数的简单 class,并查看生成的汇编代码,您会发现没有创建构造函数。即使您尝试使用自动或动态变量实例化该对象,也不会生成任何代码。简而言之,由于默认构造函数甚至无法执行任何操作,因此编译器没有理由生成任何代码。

您可以使用启用了 C++20 的 gcc 11.2 查看此 here。请注意,我关闭了优化,只是为了表明不是 -O3 删除了调用。