c++ - 对于 C++ 中的单个静态变量,是否有比类更好的选择?

标签 c++

当我有一个程序需要随机数生成器时,我使用这个类,以便整个程序可以在同一个 rng 上运行。

#include <random>
#include <ctime>
using namespace std;

class Rizzian {
private:
    static mt19937 mt;
public:
    void initialize() {
        mt.seed(unsigned(time(NULL)));
    }
    unsigned int r() {
        return mt();
    }
};

这要求以下行出现在代码的其他位置(在任何函数或类定义之外):

mt19937 Rizzian::mt = mt19937();

当 rng 初始化并且我有变量 Rizzian rng 时,我使用 rng.r() 获得随机数。

但是在 Rizzian 的定义之外增加一行让我觉得好像有更好的方法可以做到这一点,而且一般来说,一个静态变量的整个类感觉有点矫枉过正。所以这对我来说只是一种预感。这里有东西发臭。

这不是关于 rngs 或 mersenne twinters 或其他任何东西的具体问题。有没有更好的方法让静态变量整个程序都可以访问?

最佳答案

不需要专门为这个函数创建一个类。函数还可以包含静态成员。带有 static 关键字的行仅执行一次。

#include <random>
#include <ctime>
#include <iostream>

using namespace std;

unsigned int rnd()
{
  static bool first_call = true;
  static mt19937 mt = mt19937();

  if (first_call)
  {
    mt.seed(unsigned(time(NULL)));
    first_call = false;
  }

  return mt();
}

int main()
{
  unsigned int r = rnd();
  std::cout << r << std::endl;

  for (int i=1; i<10; i++)
  {
    r = rnd();
    std::cout << r << std::endl;
  }
}

关于c++ - 对于 C++ 中的单个静态变量,是否有比类更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836321/

相关文章:

C++,根据值输入从二维数组中选择

c++ - QGraphicsPixmapItem 不可选

php - 将输出从 C++ 传递到 PHP

c++ - OpenGL 统一缓冲对象(数组)跳过其他 Vec2

c++ - 如何以相当可移植的方式以编程方式检查内存使用情况? (C/C++)

c++ - SFML 奇怪的运动

c++ - C++ 中的 Miller-Rabin 素数测试问题

c++ - 如何使用 XF86VidModeSetGamma() 更改第二台显示器的 Gamma 值?

c++ - 在不使用异常的情况下在中间停止程序流

c++ - 为什么 C++ 链接器在构建期间需要库文件,即使我是动态链接的?