堆栈指针是伪随机数的良好来源

use*_*108 1 c c++

例如:

int main()
{
  int p;

  ::std::cout << ::std::uintptr_t(&p) << ::std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果重复执行,这将始终产生“随机”数字。可以在 C 中完成类似的事情。我看不到任何关于它的 UB。

Jes*_*uhl 5

,不。

不能使用变量地址、未初始化变量的值等作为随机数的来源。

其中一些用途将使您直接获得“未定义行为领域”的门票,在那里您的编译器可以对您的代码做可怕的事情。

有些并不是真的那么随机。

如果您想要随机数,请使用 < random > 中提供的内容,并确保在不random_device直接使用的情况下正确设置生成器的种子(对于非加密安全数字,您可能不希望这样做)。

甚至不要考虑rand()- 忘记它的存在。这太可怕了。

您应该使用 astd::seed_seq来混合多个熵源,然后使用它来为生成器提供种子。假设您还包括其他更高质量的来源(特别是),将变量的地址作为许多输入之一seed_seq就可以了std::random_device