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