c++ - 随机循环终止条件是否明确定义?

标签 c++ random undefined-behavior language-lawyer

<分区>

考虑 main 的主体:

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

令人惊讶的是,无论是在规范中、在 Google 上还是在本网站上,我都找不到任何关于它是否定义明确的信息。至于规范:

N3485 § 6.5/4 [stmt.iter] 对这种情况说:

[ Note: The requirements on conditions in iteration statements are described in 6.4. — end note ]

然而,翻阅 6.4,我没有看到任何与此场景相关的内容。理论上,循环几乎可以永远持续下去,但在实践中,我通常有 5 毫秒的运行时间,所有测试运行中有一次是 22 毫秒。

将循环终止条件基于不断变化的(伪)随机数是否是明确定义的行为?如果不是,属于哪种行为?

最佳答案

std::rand() 将在每次迭代时被调用,然后循环是否继续取决于其返回值。

没有理由在这里有任何未定义的行为。

这和做这样的事情没有什么不同

while (my_vector.empty());

为什么您认为这个案例会很特别?

关于c++ - 随机循环终止条件是否明确定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182529/

相关文章:

c++ - 在析构函数中修改类成员对象是否会导致未定义的行为?

c - 在 C 中应用具有未初始化变量的 XOR 运算符

c++ - 删除 void 指针除了调用全局删除运算符之外还能做些什么?

c++ - 无法从类方法访问类变量

python - 在 python 中从多元 pdf 中采样

haskell - Rand 的 MonadParallel 实例

c++ - 随机选择字典单词

c++ - 错误 : passing ‘const std::__cxx11::list<>’ as ‘this’ argument discards qualifiers

c++ - ubuntu/linux/unix 中有带有 cbc 加密的 aes 256 吗?

c++ - 从另一个 std::Optional 和其他东西初始化 std::Optional 的惯用方法