c++ - 静态类成员的初始化。为什么要构造函数?

标签 c++ c++11 initialization static-members constexpr

当我想将静态指针作为类的成员时,我需要 constexpr 来使用 nullptr 进行初始化。

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

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

最佳答案

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

Application.h

class Application {
    private:
        static Application* app;
}

应用程序.cpp

Application* Application::app = nullptr;

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

关于c++ - 静态类成员的初始化。为什么要构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979266/

相关文章:

c++ - 模板重载解析规则

c++ - 将 C++ vector 写入输出文件

c++ - 有什么理由为返回 void 的函数声明 constexpr?

java - 最终变量和匿名类的变量可能尚未初始化

c++ - 控制台程序中的奇怪行为

c++ - 初始化并使用 C++ std::string 作为 char 数组

c++ - 为什么这个格式错误的程序在 g++ 中编译得很好?

c++ - VS2015 和 GCC 5.4.0 中的 Constexpr 阶乘编译结果

c++ - 当我在同一范围内多次初始化同名局部变量时,为什么 C++11 编译器不报错?

c++ - 为什么 boost-constructors 的工作方式如此不同?