例如:
int main()
{
int p;
::std::cout << ::std::uintptr_t(&p) << ::std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果重复执行,这将始终产生“随机”数字。可以在 C 中完成类似的事情。我看不到任何关于它的 UB。
不,不,不。
您不能使用变量地址、未初始化变量的值等作为随机数的来源。
其中一些用途将使您直接获得“未定义行为领域”的门票,在那里您的编译器可以对您的代码做可怕的事情。
有些并不是真的那么随机。
如果您想要随机数,请使用 < random > 中提供的内容,并确保在不random_device直接使用的情况下正确设置生成器的种子(对于非加密安全数字,您可能不希望这样做)。
甚至不要考虑rand()- 忘记它的存在。这太可怕了。
您应该使用 astd::seed_seq来混合多个熵源,然后使用它来为生成器提供种子。假设您还包括其他更高质量的来源(特别是),将变量的地址作为许多输入之一seed_seq就可以了std::random_device。
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |