当我想将静态指针作为类的成员时,我需要constexpr
来进行nullptr
的初始化。
class Application {
private:
constexpr static Application* app = nullptr;
}
有人可以解释我为什么需要这样做吗?我找不到静态变量必须在编译时必须存在的确切原因。
答案 0 :(得分:8)
那是因为你在类定义中初始化它。这只允许常量积分和枚举类型(总是)和constexpr
数据成员(自C ++ 11以来)。通常情况下,您可以在定义它的地方(类外)初始化它,如下所示:
<强> Application.h 强>
class Application {
private:
static Application* app;
}
<强> Application.cpp 强>
Application* Application::app = nullptr;
请注意,即使在constexpr
情况下也需要提供类外定义,但它必须不包含初始化。不过,我相信第二种情况就是你真正想要的。
答案 1 :(得分:3)
如果你不希望它是constexpr
(并且它不是一个整数),那么你需要在类体之外初始化它:
class Application
{
private:
static Application* app;
};
Application* Application::app = nullptr;
答案 2 :(得分:1)
通常,您需要在类声明之外初始化静态成员变量,除非它是const。我认为this比我更好地解释了它。
答案 3 :(得分:0)
静态变量不需要“在编译时存在”。但是如果要在类中初始化静态变量,则需要在编译时知道它的值。
但是,我不知道这种限制的原因。