Mat*_*reu 5 c++ initialization static-members constexpr c++11
当我想要一个静态指针作为我需要constexpr进行初始化的类的成员时nullptr.
class Application {
private:
constexpr static Application* app = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释我为什么需要这样做吗?我无法找到为什么静态变量必须在编译时存在的确切原因.
那是因为你在类定义中初始化它.这只允许常量的整数和枚举类型(总是)和constexpr数据成员(从C++ 11开始).通常情况下,您可以在定义它的地方(类外)初始化它,如下所示:
Application.h
class Application {
private:
static Application* app;
}
Run Code Online (Sandbox Code Playgroud)
Application.cpp
Application* Application::app = nullptr;
Run Code Online (Sandbox Code Playgroud)
请注意,即使在这种constexpr情况下,您也需要提供类外定义,但它不能包含初始化程序.不过,我相信第二种情况就是你真正想要的.