c++ - 是否可以在运行main之后初始化一个静态成员变量?

标签 c++ static

测试.h

class Test
{
    static int i;
};

测试.cpp

int Test::i = 1;

我知道通常我们会像上面那样初始化一个静态成员。静态成员在函数 main 运行之前被初始化。
我的问题是:
是否可以在函数 main 运行后 初始化静态成员?像这样:

int main()
{
// do something
// initialize the Test::i here
}

最佳答案

不,不可能初始化它,但是你应该没有理由不能只调用一个为i赋值的静态setter函数> 在运行时。这是最好的方法。

或者您也可以让构造函数始终初始化变量:

#include <iostream>

class Test
{
  private:
    static int i;

  public:
    Test()
    {
      i=2;
    }

    void print_i (void)
    {
      std::cout << i << std::endl;
    }
};

int Test::i = 1;


int main()
{
  Test test;

  test.print_i(); // will print 2
}

关于c++ - 是否可以在运行main之后初始化一个静态成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048154/

相关文章:

c++ - 将带有模板的构造函数实现与头文件分离

c++ - 客户端断开连接后处理服务器应用程序中的线程

python - 功能参数交互式探索工具

c++ - 将 HWND 传递给方法并存储在类中

c - 如何从 typedef 生成静态结构

objective-c - 如何像常量一样声明我自己的 CGRectZero?

c - 在 C 中调整静态数组的大小

c++ - 从 unordered_multiset 读取会导致崩溃

python - 使用 StaticFileHandler 在 Tornado Python 上托管文件

c - 相当于 Windows 上的 PTHREAD_MUTEX_INITIALIZER 吗?