gpt4 book ai didi

c++ - 是否将 std::time 与 std::srand 有效代码一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:16 27 4
gpt4 key购买 nike

在 C++ 中这样写是合法的:

std::srand(std::time(nullptr));

或者这会产生未定义的行为吗?


std::time 返回 std::time_t这是一种算术类型,但除此之外未指定。据我理解,算术类型是 float 、整数和字符类型中的任何一种。

std::srandunsigned int 作为种子值。

因此,我认为您不能严格执行此转换。我读到在符合 POSIX 的系统上,std::time_t 是整数,是自 00:00,1970 年 1 月 1 日 UTC 以来的秒数。在这种情况下,转换可能需要从有符号转换为无符号,这是实现定义的转换,但应该没问题,并且从较大的整数类型转换为较小的整数类型,这对种子来说也很好。

最佳答案

你是对的,time_t可能是浮点类型,如果截断值的结果不能表示为 unsigned int ,则行为未定义 ([conv.fpint]/1)。

如果您想以符合标准的方式生成随机数,我建议使用 C++11 <random>设施。您可以从 std::random_device 播种 RNG .参见,例如, https://stackoverflow.com/a/19666713/481267

关于c++ - 是否将 std::time 与 std::srand 有效代码一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com