由于在main函数之前创建了全局对象,因此从rand()获得完全相同的结果

时间:2013-02-16 15:58:17

标签: c++ opengl srand

我正在使用rand在Windows,Visual Studio 2010上获取一些“随机”数字。

在我已包含的主文件中并使用此:
srand(time(NULL))

在另一个文件中,在对象的构造函数中 (对象是全局定义的,因为它在OpenGL函数中使用(Init,Render)
我在笔记本电脑和台式机上调用rand()%绑定,10次并得到相同的结果。

这应该是因为在从rand播种rand之前创建的对象。

如何避免这种情况并使对象保持全局?

1 个答案:

答案 0 :(得分:2)

在全局对象的构造函数中,在使用srand(time(NULL))之前执行rand。或者,让另一个非本地对象的静态存储持续时间为srand(time(NULL))。确保它在同一个翻译单元中定义,但在使用rand的对象之前定义。具有静态存储持续时间的非本地对象按定义顺序初始化。