繁体   English   中英

静态类成员的初始化。 为什么用constexpr?

[英]Initialisation of static class member. Why constexpr?

当我想将静态指针作为类的成员时,我需要使用constexpr进行nullptr的初始化。

class Application {
    private:
        constexpr static Application* app = nullptr;
}

有人可以向我解释为什么我需要这样做吗? 我找不到确切的理由说明为什么静态变量必须在编译时存在。

那是因为您要在类定义中对其进行初始化。 这仅适用于常量整数和枚举类型(始终)以及constexpr数据成员(自C ++ 11起)。 通常,您可以在定义它的地方(类之外)对其进行初始化,如下所示:

Application.h

class Application {
    private:
        static Application* app;
}

Application.cpp

Application* Application::app = nullptr;

请注意,即使在constexpr情况下,也需要提供类外定义,但是该定义不能包含初始化程序。 不过,我相信第二种情况是您真正想要的。

如果您不希望它成为constexpr (并且它不是整数),则需要在类主体外部对其进行初始化:

class Application
{
private:
    static Application* app;
};

Application* Application::app = nullptr;

通常,您需要在类声明之外初始化静态成员变量,除非它是const。 我认为比我能解释的更好。

静态变量不需要“在编译时存在”。 但是,如果要在类内部初始化静态变量,则需要在编译时知道其值。

但是,我不知道此限制的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM