如果类未初始化,C++ 编译器是否会生成 def ctor?

dig*_*evo 1 c++ destructor default-constructor

我编写了一个实用程序类(我猜它充当辅助类),它只有几个要在另一个类中使用的静态成员函数。它没有任何非静态成员(变量或函数)。所以它也没有任何显式的 ctorsdtor

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

Cor*_*mer 7

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

class Example
{
public:
    static void Foo();
    static int Bar();
};
Run Code Online (Sandbox Code Playgroud)

那么你可能不应该class首先使用 a,而这些可能应该是命名空间中的自由函数

namespace Example
{
    void Foo();
    int Bar();
}
Run Code Online (Sandbox Code Playgroud)

它仍然允许您调用它们Example::Foo(),但Example::Bar()现在您不必担心有人尝试实例化您的“类”,因为这不是您设计它的目的。

  • 需要注意的一件事是,如果您在头文件中提供函数的定义,则当您从类的静态成员函数转换为命名空间中的自由函数时,必须将它们标记为“内联”,以避免出现- 违反定义规则。如果您只是在标头中进行声明并在源文件中进行实现,则不必这样做。 (3认同)