[英]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.