7

当我想要一个静态指针作为类的成员时,我需要constexpr使用nullptr.

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

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

4

4 回答 4

9

那是因为您在类定义中对其进行了初始化。这仅允许用于常量整数和枚举类型(总是)和constexpr数据成员(自 C++11 起)。通常,您会在定义它的位置(在类之外)对其进行初始化,如下所示:

应用程序.h

class Application {
    private:
        static Application* app;
}

应用程序.cpp

Application* Application::app = nullptr;

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

于 2013-10-11T13:28:34.503 回答
3

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

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

Application* Application::app = nullptr;
于 2013-10-11T13:27:29.880 回答
1

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

于 2013-10-11T13:46:50.187 回答
0

静态变量不需要“在编译时存在”。但是如果你想在类内部初始化一个静态变量,它的值需要在编译时知道。

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

于 2013-10-11T13:29:01.347 回答